📄 particlefun.cpp
字号:
/*
glmain.cpp - OpenGL mainframe
Copyright (c) HalfLucifer, 2001.6.20
*/
#include "ParticleFun.h"
void ProcessMenu()
{
font.Print(font.Viewport.left+10, font.Viewport.bottom*9/10-50, "Numbers: %d", ps.GetNum());
font.Print(font.Viewport.left+10, font.Viewport.bottom*9/10-70, "Size: %.0f", ps.GetSize());
font.Print(font.Viewport.left+10, font.Viewport.bottom*9/10-90, "Gravity: %.1f", ps.GetGravity());
font.Print(font.Viewport.left+10, font.Viewport.bottom*9/10-110, "Bounce: %.1f", ps.GetBounce());
font.Print(font.Viewport.left+10, font.Viewport.bottom*9/10-130, "EnergyDrop: %.3f", ps.GetEnergyDrop());
font.Print(font.Viewport.left+10, font.Viewport.bottom*9/10-150, "BirthVelocity: %.1f", ps.GetBirthVelocity());
glColor3f(0.66f, 0.22f, 0.22f);
switch (g_menu)
{
case 0:
font.Print(font.Viewport.left+10, font.Viewport.bottom*9/10-50, "Numbers: %d", ps.GetNum());
break;
case 1:
font.Print(font.Viewport.left+10, font.Viewport.bottom*9/10-70, "Size: %.0f", ps.GetSize());
break;
case 2:
font.Print(font.Viewport.left+10, font.Viewport.bottom*9/10-90, "Gravity: %.1f", ps.GetGravity());
break;
case 3:
font.Print(font.Viewport.left+10, font.Viewport.bottom*9/10-110, "Bounce: %.1f", ps.GetBounce());
break;
case 4:
font.Print(font.Viewport.left+10, font.Viewport.bottom*9/10-130, "EnergyDrop: %.3f", ps.GetEnergyDrop());
break;
case 5:
font.Print(font.Viewport.left+10, font.Viewport.bottom*9/10-150, "BirthVelocity: %.1f", ps.GetBirthVelocity());
break;
}
glColor3f(0.33f, 0.66f, 1.0f);
font.Print(font.Viewport.left+10, font.Viewport.bottom*9/10-10, "Billboarding: %s", g_billboard ? "On" : "Off");
}
void glProcessKeyboard()
{
if (input.KeyDown(DIK_A) && !ap)
{
ap = true;
if (g_menu==0)
g_menu = 5;
else
g_menu--;
}
if (input.KeyUp(DIK_A))
ap = false;
if (input.KeyDown(DIK_Z) && !zp)
{
zp = true;
if (g_menu==5)
g_menu = 0;
else
g_menu++;
}
if (input.KeyUp(DIK_Z))
zp = false;
if (input.KeyDown(DIK_S) && !sp)
{
sp = true;
switch (g_menu)
{
case 0:
ps.SetNum(ps.GetNum()+500);
break;
case 1:
ps.SetSize(ps.GetSize()+10);
break;
case 2:
ps.SetGravity(ps.GetGravity()+1);
break;
case 3:
ps.SetBounce(ps.GetBounce()+0.1f);
break;
case 4:
ps.SetEnergyDrop(ps.GetEnergyDrop()+0.005f);
break;
case 5:
ps.SetBirthVelocity(ps.GetBirthVelocity()+5);
break;
}
}
if (input.KeyUp(DIK_S))
sp = false;
if (input.KeyDown(DIK_X) && !xp)
{
xp = true;
switch (g_menu)
{
case 0:
ps.SetNum(ps.GetNum()-500);
break;
case 1:
ps.SetSize(ps.GetSize()-10);
break;
case 2:
ps.SetGravity(ps.GetGravity()-1);
break;
case 3:
ps.SetBounce(ps.GetBounce()-0.1f);
break;
case 4:
ps.SetEnergyDrop(ps.GetEnergyDrop()-0.005f);
break;
case 5:
ps.SetBirthVelocity(ps.GetBirthVelocity()-5);
break;
}
}
if (input.KeyUp(DIK_X))
xp = false;
if (input.KeyDown(DIK_B) && !bp)
{
bp = true;
g_billboard = !g_billboard;
}
if (input.KeyUp(DIK_B))
bp = false;
if (input.KeyDown(DIK_SPACE) && !spp)
{
spp = true;
g_init = false;
}
if (input.KeyUp(DIK_SPACE))
spp = false;
if (input.KeyDown(DIK_UP))
camera.Move(0.1f);
if (input.KeyDown(DIK_DOWN))
camera.Move(-0.1f);
if (input.KeyDown(DIK_LEFT))
camera.Strafe(0.1f);
if (input.KeyDown(DIK_RIGHT))
camera.Strafe(-0.1f);
if (input.KeyDown(DIK_ESCAPE))
PROGRAM_QUIT = true;
}
bool glInitialize()
{
font.Initialize("font.tga");
input.Initialize();
ps.Initialize();
ps.SetEmitterPos(GLvector(0, 200, 0));
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClearDepth(1.0f);
glShadeModel(GL_SMOOTH);
glDepthFunc(GL_LEQUAL);
glLightfv(GL_LIGHT0, GL_AMBIENT, GLvector(1.0f, 1.0f, 1.0f));
glLightfv(GL_LIGHT0, GL_DIFFUSE, GLvector(1.0f, 1.0f, 1.0f));
glLightfv(GL_LIGHT0, GL_POSITION, GLvector(0.0f, 200.0f, 50.0f));
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
ShowCursor(false);
return true;
}
void glShutDown()
{
}
void glReshape(int width, int height)
{
glViewport(0, 0, (GLsizei)(width), (GLsizei)(height));
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.0f, (GLfloat)width/(GLfloat)height, 1.0f, 9999.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void glDrawScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
camera.Update();
// Begin to Draw
if (!g_init)
{
srand(GetTickCount());
ps.SetColor(GLvector((float)(rand()%256)/255, (float)(rand()%256)/255, (float)(rand()%256)/255));
g_init = true;
}
else
{
ps.Update();
ps.Render();
ProcessMenu();
}
// End to Draw
camera.ViewMove();
input.Update();
glProcessKeyboard();
timer.Update();
glColor3f(1.0f, 1.0f, 0.1f);
font.Print(font.Viewport.left+10, font.Viewport.bottom*9/10+30, "FPS: %.2f", timer.GetFps());
glColor3f(1.0f, 1.0f, 1.0f);
font.Print(font.Viewport.right*2/5+100, 10, "Written by HalfLucifer (c)2002");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -