Spotlight doesn't light up my scene

Started by
-1 comments, last by WesleyStessens 12 years, 11 months ago
Hello everyone!

I'm having some trouble with getting a spotlight to correctly light up my scene.

The center of my scene is at 0, 0, 0.

I translate and rotate my scene so that it seems like a player has moved,
I then reposition the light at 0, 0, 0 and draw the world around 0, 0, 0 as center point.

I am not seeing my spotlight however... Who knows what might be wrong?
// INIT:

glShadeModel(GL_SMOOTH); // Enable smooth shading
qglClearColor(Qt::black); // Set the clear color to a black background
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really nice perspective calculations

// Set up lighting
glEnable(GL_LIGHTING);
GLfloat fv[] = {1.0f, 1.0f, 1.0f, 1.0f};
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, fv);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, fv);

// Spot in center of room shining down
GLfloat ambient = {0.5f, 0.2f, 0.2f, 1.0f};
glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);
GLfloat diffuse = {0.5f, 0.2f, 0.2f, 1.0f};
glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse);
GLfloat specular = {0.5f, 0.2f, 0.2f, 1.0f};
glLightfv(GL_LIGHT1, GL_SPECULAR, specular);
glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 90.0f);
GLfloat direction = {0.0f, 0.0f, -1.0f};
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, direction);
glEnable(GL_LIGHT1);

// Set up textures
glEnable(GL_TEXTURE_2D);

// Set up blending
glBlendFunc(GL_SRC_ALPHA, GL_ONE);

// Set up depth testing
glClearDepth(1.0f);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);

// RESIZE:

// Prevent divide by zero (in the gluPerspective call)
if (height == 0)
height = 1;

glViewport(0, 0, width, height); // Reset current viewport

glMatrixMode(GL_PROJECTION); // Select projection matrix
glLoadIdentity(); // Reset projection matrix

gluPerspective(45.0f, static_cast<GLfloat>(width)/height, 0.1f, 100.0f); // Calculate aspect ratio

glMatrixMode(GL_MODELVIEW); // Select modelview matrix
glLoadIdentity(); // Reset modelview matrix

// PAINT:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear screen and depth buffer

glMatrixMode(GL_MODELVIEW); // Select modelview matrix
glLoadIdentity(); // Reset modelview matrix

// Move scene to make it seem like player moves around
glRotatef(lookupdown, 1.0f, 0.0f, 0.0f);
glRotatef(sceneroty, 0.0f, 1.0f, 0.0f); // Rotate to direction player is watching
glTranslatef(xtrans, ytrans, ztrans); // Translate scene based on player position

// The center of the world is at (0.0f, 0.0f, 0.0f)

// Reset light position
GLfloat fv[] = {0.0f, 0.0f, 0.0f, 1.0f};
glLightfv(GL_LIGHT1, GL_POSITION, fv);

// Draw the world
for (int i = 0; i < displayLists.size(); ++i) {
glCallList(displayLists.at(i)); }

This topic is closed to new replies.

Advertisement