124 CHAPTER 4: Turning On the Lights^
GLfloat dimcyan[]={0.0,.5,.5,1.0};
//Lights go here.
glLightfv(SS_SUNLIGHT,GL_POSITION,sunPos);
glLightfv(SS_SUNLIGHT,GL_DIFFUSE,white);
glLightfv(SS_SUNLIGHT,GL_SPECULAR,yellow);
glLightfv(SS_FILLLIGHT1,GL_POSITION,posFill1);
glLightfv(SS_FILLLIGHT1,GL_DIFFUSE,dimblue);
glLightfv(SS_FILLLIGHT1,GL_SPECULAR,dimcyan);
glLightfv(SS_FILLLIGHT2,GL_POSITION,posFill2);
glLightfv(SS_FILLLIGHT2,GL_SPECULAR,dimmagenta);
glLightfv(SS_FILLLIGHT2,GL_DIFFUSE,dimblue);
//Materials go here.
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, cyan);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, white);
glLightf(SS_SUNLIGHT,GL_QUADRATIC_ATTENUATION,.001);
glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,25);
glShadeModel(GL_SMOOTH);
glLightModelf(GL_LIGHT_MODEL_TWO_SIDE,0.0);
glEnable(GL_LIGHTING);
glEnable(SS_SUNLIGHT);
glEnable(SS_FILLLIGHT1);
glEnable(SS_FILLLIGHT2);
}
Naturally, the top-level execute method solar-system controller has to be completely
overhauled, along with the addition of a small utility function, as shown in Listing 4-9.
Listing 4-9. Solar-System execute methods
-(void)execute
{
GLfloat paleYellow[]={1.0,1.0,0.3,1.0}; //1
GLfloat white[]={1.0,1.0,1.0,1.0};
GLfloat cyan[]={0.0,1.0,1.0,1.0};
GLfloat black[]={0.0,0.0,0.0,0.0}; //2
static GLfloat angle=0.0;
GLfloat orbitalIncrement=1.25; //3
GLfloat sunPos[3]={0.0,0.0,0.0,1.0};