Code:
#include "cgfxopengl.h"
#include "shapes.h"
//=========================================================================
const GLfloat flashLightPos[] = { 0.0, 0.0, 0.0, 1.0 };
const GLfloat flashLightDir[] = { 0.0, 0.0, -1.0 };
const GLfloat flashLightCol[] = { 0.2f, 0.2f, 0.2f, 1.0f };
GLfloat redLightPos[] = {3.0, 2.0, 0.0, 1.0};
GLfloat redLightCol[] = {1.0f, 0.0f, 0.0f, 1.0f};
//albient color for the scene, bluish Green
GLfloat globalAmbience[] = {0.0, 0.2, 0.3, 1.0};
//=========================================================================
CGfxOpenGL::CGfxOpenGL()
{
flashLightOn = GL_TRUE;
}
CGfxOpenGL::~CGfxOpenGL()
{
}
bool CGfxOpenGL::intialize()
{
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
//glLightModelfv(GL_LIGHT_MODEL_AMBIENT, globalAmbience);
//set up the flashLight
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_POSITION, flashLightPos);
glLightfv(GL_LIGHT0, GL_AMBIENT, flashLightCol);
glLightfv(GL_LIGHT0, GL_DIFFUSE, flashLightCol);
glLightfv(GL_LIGHT0, GL_SPECULAR, flashLightCol);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, flashLightDir);
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 20.0);
glEnable(GL_LIGHT1);
glLightfv(GL_LIGHT1, GL_POSITION, redLightPos);
glLightfv(GL_LIGHT1, GL_AMBIENT, redLightCol);
glLightfv(GL_LIGHT1, GL_DIFFUSE, redLightCol);
glLightfv(GL_LIGHT1, GL_SPECULAR, redLightCol);
return true;
}
void CGfxOpenGL::setupProjection(int width, int height)
{
//prevent division by 0
if(height = 0)
{
height = 1;
}
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (GLfloat)width/(GLfloat)height, 1.0, 1000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
windowWidth = width;
windowHeight = height;
}
void CGfxOpenGL::render()
{
glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT |
GL_STENCIL_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0.0, 0.0, 20.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
if(flashLightOn)
glEnable(GL_LIGHT0);
else
glDisable(GL_LIGHT0);
GLfloat cubeColor[] = { 0.6f, 0.7f, 1.0f, 1.0f };
GLfloat cubeSpecular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, cubeColor);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, cubeSpecular);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 15.0);
DrawCone(3, 3, 10);
}
bool CGfxOpenGL::shutDown()
{
return true;
}
void CGfxOpenGL::prepare()
{
}
The draw cone functions correctly and is defined elsewhere.