Bueno pues debes fijarte bien en tu luz ambiental y las normales de tus figuras, además de la posición de la luz que quieres agregar
GLfloat Especular[0] = .20f;
GLfloat Especular[1] = .20f;
GLfloat Especular[2] = .20f;
GLfloat Especular[3] = 1.0f;
GLfloat Difuso[0] = .10f;
GLfloat Difuso[1] = .10f;
GLfloat Difuso[2] = .10f;
GLfloat Difuso[3] = 1.0f;
GLfloat Ambiental[0] = 1.0f;
GLfloat Ambiental[1] = 1.0f;
GLfloat Ambiental[2] = 1.0f;
GLfloat Ambiental[3] = 1.0f;
GLfloat Posicion[0] = 0.0f;
GLfloat Posicion[1] = 0.0f;
GLfloat Posicion[2] = 150.0f;
GLfloat Posicion[3] = 1.0;
bool Encender = true;
int nLuz = GL_LIGHT0 + iLuz;
glLightfv(nLuz,GL_POSITION,Posicion);
glLightfv(nLuz,GL_AMBIENT ,Ambiental);
glLightfv(nLuz,GL_DIFFUSE ,Difuso);
glLightfv(nLuz,GL_SPECULAR,Especular);
if(Encender)
glEnable (nLuz);
else
glDisable(nLuz);
te paso este código y recuerda que los arreglos se dividen en 4 que son RGBA o sea Rojo, verde, azul y alpha al igual la posición x,y,z. Fijate bien en tus valores si a la luz difusa le das un valor mayor de .2 ya no se observa muy bien y se ven muy marcada la triangulación. la ambiental si es bueno que le des un valor grande, cercano a uno y la speculuar casi no pinta esa modificala a tu antojo.
Las normales de tus vértices son muy importantes porque sin ellas no hace efecto la luz difusa y si están mal puestas se ve horrible, te dejo más código
void CalculaNormales(void)
Vector p;
Vector q;
Vector n;
Vertice v1;
Vertice v2;
Vertice v3;
float modulo;
for(int i=0;i<=nTriangulos-2;i++)
{
v1.x = VertexArray[IndexArray[i].a].x;
v1.y = VertexArray[IndexArray[i].a].y;
v1.z = VertexArray[IndexArray[i].a].z;
v2.x = VertexArray[IndexArray[i].b].x;
v2.y = VertexArray[IndexArray[i].b].y;
v2.z = VertexArray[IndexArray[i].b].z;
v3.x = VertexArray[IndexArray[i].c].x;
v3.y = VertexArray[IndexArray[i].c].y;
v3.z = VertexArray[IndexArray[i].c].z;
p.xi = v1.x - v2.x;
p.yi = v1.y - v2.y;
p.zi = v1.z - v2.z;
q.xi = v1.x - v3.x;
q.yi = v1.y - v3.y;
q.zi = v1.z - v3.z;
n.xi = p.yi*q.zi-p.zi*q.yi;
n.yi = (p.xi*q.zi-p.zi*q.xi)*(-1);
n.zi = p.xi*q.yi-p.yi*q.xi;
modulo = sqrt(pow(n.xi,2)+pow(n.yi,2)+pow(n.yi,2));
n.xi = (n.xi/modulo);
n.yi = (n.yi/modulo);
n.zi = (n.zi/modulo);
NormalArray[i].x = n.xi;
NormalArray[i].y = n.yi;
NormalArray[i].z = n.zi;
}
}
Vector y Vertice son estructuras con x,y,z en float.
Solo asocia tu arreglo de vertices con tu arreglo de normales, este código es por si tu modelo fue hecho con VRML, ,a .b .c son los indices de que vertice debe ir pegado con cual. Revisa como obtener vectores normales unitarios de un plano.
Espero haberte ayudado