Интерполяция цвета
Вы можете запустить новый вариант приложения и убедиться в том, что он работает не хуже предыдущего. Кроме подготовки изображения (вызов DrawScene) мы внутри init включили возможность интерполяции цвета точек при заполнении полигона:
glShadeModel (GL_SMOOTH);
Этого можно было и не делать, так как она включена по умолчанию. Но мы вставили код, с тем чтобы явно обозначить намерение исследовать эту возможность. Для того чтобы интерполяция начала действовать, надо задать разные цвета разным вершинам одного полигона. Уберите завершающий фрагмент функции DrawScene, где приведены коды непосредственного рисования куба, и вставьте вместо него следующий текст:
glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); glBegin (GL_QUADS); //====== Обновляем генератор случайных чисел srand (time (0)); //====== 6 граней куба for (int i = 0; i < 6; i++) (glNormalSdv (norm[i]); //====== 4 вершины одной грани for (int j = 0; j < 4; j++) { //====== Задаем различные цвета glColorSd (rand()%10/10., rand ()%10/10., rand()%10/10.); glVertex3fv(v[id[i] [ j ] ]); } } glEnd(); glEndList ();
Включите в начало файла директиву препроцессора:
#include <time.h>
Для того чтобы стала доступной функция timeQ. Она помогает настроить генератор псевдослучайных чисел так, чтобы при разных запусках программы получать различные комбинации цветов. Двойное деление на 10 (rand()%10/10.) позволяет масштабировать и нормировать компоненты цвета. Запустите и проверьте качество интерполяции цветов.