Этот шаг не сильно отличается от предыдущего. Просто добавили еще 1 источник света. Мелкая хитрость состоит в том, что в OpenGL первый (т.е. нулевой) источник всегда как бы включен, т.е. излучает по оси Z с интенсивностью 1.0, 1.0, 1.0, 0.0 по всем составляющим света. Второй источник надо просто включить.
Зададим положение и интенсивность 2-го источника:
GLfloat light1_Position[4] = {0.0f, 0.0f, -2.5f, 1.0f}; GLfloat light1_Intensity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
Теперь в функции StartRC включим его:
glEnable(GL_LIGHT1);
и дадим ему определенный тип:
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_Intensity);
Источники света в принципе бывают рассеяные (т.е. diffuse) и направленные (т.е. ambient), которые могут быть как бесконечно удалены (т.е. лучи идут как бы параллельно), так и типа прожектора с определенной диаграммой направленности. Вообще-то свойств у источников света достаточно много и они связаны с еще большим количеством свойств материалов объектов. Если мне не будет лень, то постепенно пройдемся по многим из них ;)
Теперь посмотрим на функцию Draw():
GLvoid Draw() { static GLfloat rot = 0.0f; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glColor3f (1.0, 1.0, 0.5); glCallList(CUBE_LIST); glRotatef(rot, 0.0f, 1.0f, 1.0f); glPushMatrix(); glLightfv(GL_LIGHT0, GL_POSITION, light0_Position); glTranslatef(light0_Position[0],light0_Position[1],light0_Position[2]); glScalef(0.1f, 0.1f, 0.1f); glCallList(CUBE_LIST); glPopMatrix(); // ------------ Start New Block -------------- glPushMatrix(); glLightfv(GL_LIGHT1, GL_POSITION, light1_Position); glRotatef(rot, 1.0f, 0.0f, 0.0f); glTranslatef(light1_Position[0],light1_Position[1],light1_Position[2]); glScalef(0.1f, 0.1f, 0.1f); DrawCube(); glPopMatrix(); // ------------ End New Block ---------------- rot+=1.0f; glPopMatrix(); SwapBuffers(hDC); }
Новый код находится между символами комментариев. Если посмотреть повнимательнее, то он копирует блок кода идущий чуть выше, за исключением еще одной функции glRotatef, которая просто вращает источник вокруг X-а. Смысла никакого, но хоть немного повеселее чем по кругу.