Функция divide_triangle( ) вызывает себя в процессе рекурсивного формирования многогранника до тех пор, пока переменная n остается больше нуля, а в противном случае формирует треугольник. Ниже приведен программный код этой функции: divide_triangle(point3 a, point3 b, point3 с, int n) {
point3 vl, v2, v3; int j; if(n>0) {
for(j=0; j<3; vl[j]=a[j]+b[j];
normal(vl);
for(j=0; j<3; j++) v2[j]=a[j]+c[j]; normal(v2);
for(j=0; j<3; j++) v3[j]=c[j]+b[j]; normal(v3);
divide_triangle(a ,v2, vl, n-1); divide_triangle(c ,v3, v2, n-1); divide_triangle(b ,vl, v3, n-1); divide_triangle(vl ,v2, v3, n-1);
}
else triangle(a, b, c);
}
На рис. 6.36 показан многоугольник, аппроксимирующий сферу, который сформирован описанной программой. Сформировав приближенное представление криволинейной поверхности объекта, можно приступать к включению в программу источников света и тонированию изображения этого объекта. Но сначала нужно выяснить, какими средствами поддержки модели освещения и тонирования располагает графическая система OpenGL.
6.7. Описание источников света в OpenGL
В системе OpenGL поддерживаются источники света четырех типов, описанных выше, причем в одной программе может использоваться до восьми источников света. Каждый источник света имеет свой набор параметров, в том числе и программный флаг включения/выключения. Параметры, описывающие источник света, соответствуют параметрам модели Фонга. Для установки векторных параметров используется функция glLightfv( ), которая имеет следующий формат обращения:
glLightfv(source, parameter, pointer_to_array);
Существует четыре векторных параметра, которые определяют положение или направление лучей источника и цветовой состав его составляющих, - фоновой, диффузной и зеркальной. Для установки скалярных параметров в OpenGL служит функция glLightf ( ):
glLightf(source, parameter, value);
Рис. 6.36. Аппроксимация сферы методом последовательного разбиения
6.7. Описание источников света в OpenGL
Пусть, например, требуется включить в сцену источник GL_LIGHT0, который должен находиться в точке (1.0, 2.0, 3.0). Положение источника сохраняется в программе в виде точки в однородных координатах"opengl5_294.html">⇐ Предыдущая| |Следующая ⇒