void Lighting::LightScene() { #define LIGHTSETUP(i)\ if (lightEnabled[i])\ {\ glLightfv(GL_LIGHT##i, GL_POSITION, &lightPosition[4*i]);\ glLightfv(GL_LIGHT##i, GL_AMBIENT, &lKa[4*i]);\ glLightfv(GL_LIGHT##i, GL_DIFFUSE, &lKd[4*i]);\ glLightfv(GL_LIGHT##i, GL_SPECULAR, &lKs[4*i]);\ } LIGHTSETUP(0); LIGHTSETUP(1); LIGHTSETUP(2); LIGHTSETUP(3); LIGHTSETUP(4); LIGHTSETUP(5); LIGHTSETUP(6); LIGHTSETUP(7); glEnable(GL_LIGHTING); }
void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // camera parameters are Phi, Theta, R gluLookAt(R * cos(Phi) * cos (Theta), R * sin (Theta), R * sin(Phi) * cos (Theta), 0.0,0.0,0.0, 0.0,1.0,0.0); /* Lighting */ /* You are encouraged to change lighting parameters or make improvements/modifications to the lighting model . This way, you will personalize your assignment and your assignment will stick out. */ // global ambient light GLfloat aGa[] = { 0.0, 0.0, 0.0, 0.0 }; // light 's ambient, diffuse, specular GLfloat lKa0[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat lKd0[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat lKs0[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat lKa1[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat lKd1[] = { 1.0, 0.0, 0.0, 1.0 }; GLfloat lKs1[] = { 1.0, 0.0, 0.0, 1.0 }; GLfloat lKa2[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat lKd2[] = { 1.0, 1.0, 0.0, 1.0 }; GLfloat lKs2[] = { 1.0, 1.0, 0.0, 1.0 }; GLfloat lKa3[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat lKd3[] = { 0.0, 1.0, 1.0, 1.0 }; GLfloat lKs3[] = { 0.0, 1.0, 1.0, 1.0 }; GLfloat lKa4[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat lKd4[] = { 0.0, 0.0, 1.0, 1.0 }; GLfloat lKs4[] = { 0.0, 0.0, 1.0, 1.0 }; GLfloat lKa5[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat lKd5[] = { 1.0, 0.0, 1.0, 1.0 }; GLfloat lKs5[] = { 1.0, 0.0, 1.0, 1.0 }; GLfloat lKa6[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat lKd6[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat lKs6[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat lKa7[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat lKd7[] = { 0.0, 1.0, 1.0, 1.0 }; GLfloat lKs7[] = { 0.0, 1.0, 1.0, 1.0 }; // light positions and directions GLfloat lP0[] = { -1.999, -1.999, -1.999, 1.0 }; GLfloat lP1[] = { 1.999, -1.999, -1.999, 1.0 }; GLfloat lP2[] = { 1.999, 1.999, -1.999, 1.0 }; GLfloat lP3[] = { -1.999, 1.999, -1.999, 1.0 }; GLfloat lP4[] = { -1.999, -1.999, 1.999, 1.0 }; GLfloat lP5[] = { 1.999, -1.999, 1.999, 1.0 }; GLfloat lP6[] = { 1.999, 1.999, 1.999, 1.0 }; GLfloat lP7[] = { -1.999, 1.999, 1.999, 1.0 }; // jelly material color GLfloat mKa[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat mKd[] = { 0.3, 0.3, 0.3, 1.0 }; GLfloat mKs[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat mKe[] = { 0.0, 0.0, 0.0, 1.0 }; /* set up lighting */ glLightModelfv(GL_LIGHT_MODEL_AMBIENT, aGa); glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); // set up cube color glMaterialfv(GL_FRONT, GL_AMBIENT, mKa); glMaterialfv(GL_FRONT, GL_DIFFUSE, mKd); glMaterialfv(GL_FRONT, GL_SPECULAR, mKs); glMaterialfv(GL_FRONT, GL_EMISSION, mKe); glMaterialf(GL_FRONT, GL_SHININESS, 120); // macro to set up light i #define LIGHTSETUP(i)\ glLightfv(GL_LIGHT##i, GL_POSITION, lP##i);\ glLightfv(GL_LIGHT##i, GL_AMBIENT, lKa##i);\ glLightfv(GL_LIGHT##i, GL_DIFFUSE, lKd##i);\ glLightfv(GL_LIGHT##i, GL_SPECULAR, lKs##i);\ glEnable(GL_LIGHT##i) LIGHTSETUP (0); LIGHTSETUP (1); LIGHTSETUP (2); LIGHTSETUP (3); LIGHTSETUP (4); LIGHTSETUP (5); LIGHTSETUP (6); LIGHTSETUP (7); // enable lighting glEnable(GL_LIGHTING); glEnable(GL_DEPTH_TEST); // show the cube //showCube(&jello); glDisable(GL_LIGHTING); // show the bounding box showBoundingBox(); // show Circle and Chain showCircle(); showChain(&jello); showText(&jello); glutSwapBuffers(); }