Иллюстрированный самоучитель по Visual Studio.Net

         

Интерполяция цвета


Вы можете запустить новый вариант приложения и убедиться в том, что он работает не хуже предыдущего. Кроме подготовки изображения (вызов 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.) позволяет масштабировать и нормировать компоненты цвета. Запустите и проверьте качество интерполяции цветов.



Содержание раздела