Chap 6
Chap 6
• Set by
– glNormal3f(x, y, z);
– glNormal3fv(p);
// A directional light
glLightfv(GL_LIGHT0, GL_POSITION, direction);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseRGBA);
glLightfv(GL_LIGHT0, GL_SPECULAR, specularRGBA);
// A spotlight
glLightfv(GL_LIGHT1, GL_POSITION, position);
glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuseRGBA);
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spotDirection);
glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 45.0f);
When rendering an object, normals should be provided for each face or for
each vertex so that lighting can be computed:
glNormal3f(nx, ny, nz);
glVertex3f(x, y, z);
glRotatef(_angle, 0.0f, 1.0f, 0.0f); //Back
glColor3f(1.0f, 1.0f, 0.0f); glNormal3f(0.0f, 0.0f, -1.0f);
glBegin(GL_QUADS); glVertex3f(-1.5f, -1.0f, -1.5f);
//Front glVertex3f(-1.5f, 1.0f, -1.5f);
glNormal3f(0.0f, 0.0f, 1.0f); glVertex3f(1.5f, 1.0f, -1.5f);
glVertex3f(-1.5f, -1.0f, 1.5f); glVertex3f(1.5f, -1.0f, -1.5f);
glVertex3f(1.5f, -1.0f, 1.5f); //Left
glVertex3f(1.5f, 1.0f, 1.5f); glNormal3f(-1.0f, 0.0f, 0.0f);
glVertex3f(-1.5f, 1.0f, 1.5f); glVertex3f(-1.5f, -1.0f, -1.5f);
//Right glVertex3f(-1.5f, -1.0f, 1.5f);
glNormal3f(1.0f, 0.0f, 0.0f); glVertex3f(-1.5f, 1.0f, 1.5f);
glVertex3f(1.5f, -1.0f, -1.5f); glVertex3f(-1.5f, 1.0f, -1.5f);
glVertex3f(1.5f, 1.0f, -1.5f); glEnd();
glVertex3f(1.5f, 1.0f, 1.5f);
glVertex3f(1.5f, -1.0f, 1.5f);
Selecting an OpenGL Lighting Model
It helps, how to specify a lighting mode
void glLightModel{if}(GLenum pname, TYPE param);
void glLightModel{if}v(GLenum pname, const TYPE *param);
Cont.,
• Global Ambient Light (not from any particular source)
GLfloat lmodel_ambient[] = { 0.2, 0.2, 0.2, 1. };
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
• Two-sided Lighting
glLightModeli(LIGHT_MODEL_TWO_SIDE, GL_TRUE);