Here is my init and draw scene routines:
int DrawGLScene()
{
// clear buffers
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
// setup camera view point
gluLookAt(0.0f,2.0f,zoom, 0.0f,2.0f,0.0f, 0.0f,1.0f,0.0f);
// update light positions
glLightfv(GL_LIGHT1, GL_POSITION, lightPositionR);
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, lightDirectionR);
glLightfv(GL_LIGHT2, GL_POSITION, lightPositionG);
glLightfv(GL_LIGHT2, GL_SPOT_DIRECTION, lightDirectionG);
glLightfv(GL_LIGHT3, GL_POSITION, lightPositionB);
glLightfv(GL_LIGHT3, GL_SPOT_DIRECTION, lightDirectionB);
// check key presses
CheckKeyPress();
// Draw ground at 0.0 Y axis
DrawGround();
// draw spot light positions and direction indicators
DrawCrossHairs(lightPositionR[0],...
DrawCrossHairs(lightPositionG[0],...
DrawCrossHairs(lightPositionB[0],...
// render and update particle fountain
pMgr->Render();
pMgr->Update(g_timer.timeStep);
// draw sphere
DrawSphere();
// update fps in window title bar
DisplayText();
// update counters
yrot += 0.05f;
if (yrot > 359.0)
yrot = 0.0f;
return true;
}
int InitGL(void)
{
yrot = 0.0f;
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0f);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
// load up our textures
if (!LoadGLTexture(PARTICLE_TEXTURE1_FILE,...
// Setup Particle Manager
pMgr = new ParticleManager();
// Create and setup new particle fountain
fount[0] = new Fountain1;
CreateFount();
// enable and setp lighting and materials
glEnable(GL_LIGHTING);
// meterial properties
glMaterialfv(GL_FRONT, GL_AMBIENT, matAmbient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, matDiffuse);
glMaterialf(GL_FRONT, GL_SHININESS, 100.0f);
// global ambient light
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
// glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
// glLightfv(GL_LIGHT0, GL_SPECULAR, specularLight);
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
// red spot light
glLightfv(GL_LIGHT1, GL_AMBIENT, ambientLightR);
glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuseLightR);
glLightfv(GL_LIGHT1, GL_SPECULAR, specularLightR);
glLightfv(GL_LIGHT1, GL_POSITION, lightPositionR);
glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 5.0f);
glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 100.0f);
FVector p1, p2, p3;
p1.Set(-1.0f, 2.0f, 20.0f);
p2.Set(-5.0f, 2.0f, -2.0f);
p3 = p2 - p1; p3.Normalize();
lightDirectionR[0] = p3.x; lightDirectionR[1] = p3.y; lightDirectionR[2] = p3.z;
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, lightDirectionR);
// green spot light
glLightfv(GL_LIGHT2, GL_AMBIENT, ambientLightG);
glLightfv(GL_LIGHT2, GL_DIFFUSE, diffuseLightG);
glLightfv(GL_LIGHT2, GL_SPECULAR, specularLightG);
glLightfv(GL_LIGHT2, GL_POSITION, lightPositionG);
glLightf(GL_LIGHT2, GL_SPOT_CUTOFF, 5.0f);
glLightf(GL_LIGHT2, GL_SPOT_EXPONENT, 100.0f);
p1.Set(1.0f, 2.0f, 20.2f);
p2.Set(5.0f, 2.0f, -2.0f);
p3 = p2 - p1; p3.Normalize();
lightDirectionG[0] = p3.x; lightDirectionG[1] = p3.y; lightDirectionG[2] = p3.z;
glLightfv(GL_LIGHT2, GL_SPOT_DIRECTION, lightDirectionG);
// blue spot light
glLightfv(GL_LIGHT3, GL_AMBIENT, ambientLightB);
glLightfv(GL_LIGHT3, GL_DIFFUSE, diffuseLightB);
glLightfv(GL_LIGHT3, GL_SPECULAR, specularLightB);
glLightfv(GL_LIGHT3, GL_POSITION, lightPositionB);
glLightf(GL_LIGHT3, GL_SPOT_CUTOFF, 20.0f);
glLightf(GL_LIGHT3, GL_SPOT_EXPONENT, 100.0f);
p1.Set(0.0f, 0.0f, 6.0f);
p2.Set(0.0f, 5.0f, -2.0f);
p3 = p2 - p1; p3.Normalize();
lightDirectionB[0] = p3.x; lightDirectionB[1] = p3.y; lightDirectionB[2] = p3.z;
glLightfv(GL_LIGHT3, GL_SPOT_DIRECTION, lightDirectionB);
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
// switch on lights
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHT2);
glEnable(GL_LIGHT3);
return true;
}
screenshots here
http://hw001.gate01.com/sean451/tmp/f1.jpg
http://hw001.gate01.com/sean451/tmp/b1.jpg
Thanks a lot