На рис. 22.6 показано, в каком порядке надо передавать вершины в конвейер, чтобы получился шестиугольник и чтобы все элементы, из которых он составлен, были обращены к наблюдателю лицевой стороной. Например, в примитиве GL JRIANGLE JTRIP будут нарисованы треугольники (1 2 3), (3 2 4), (3 4 5), (5 4 6). То есть первой вершиной треугольника будет левая вершина на верхнем крае полосы. Это надо иметь в виду, чтобы понимать, какой цвет будут иметь треугольТипы примитивов

В листинге 22.13 приведен пример функции вывода шестиугольника. Параметр П at задает способ закраски, а параметр Cul 1 Mode указывает видимую сторону грани.

Листинг 22.13

void RenderFanCHWND hWnd. int Flat, int CullMode) {
RECT R;

GetClientRect(hWnd.&R): //Чтобы не повторять, при каждом рисовании эту

glViewport(0.0.R.right.R.bottom); // операцию выполняют на WM_SIZE

glShadeModel (Flat);
glClearColor(0.9f.0.9f.0.9f.0.0f):
if(CullMode) glCullFace(GL_BACK);
else glCullFace(GLJRONT):

glEnable(GL_CULL_FACE); //Включить контроль тыльных граней. glClear( GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLE_FAN); glColor3d ( 0.4. 0.8. 0.0); glVertex4d(-l. 3. -8.0. 10.0); glColor3d (0.0. 1.0. 0.0); glVertex3d(0.25.0.0. 0.0); продолжение &

Инициализация библиотек и вывод примитивов

Листинг 22.13 (продолжение)

glColor3d (1.0. 0.0. 0.0): glVertex3d(0.8. 0.2. 0.0): glColor3d (1.0. 0.0. 1.0): glVertex4d( 9.5. 7. 6.0. 10.0): glColor3d (0.0. 0.0. 1.0): glVertex3d(0.5. 1.0. 0.0): glColor3d (1.0. 1.0. 0.0); glVertex4d( -1. 7.-8.0. 10.0); glEndO:
glDisable(GL_CULL_FACE); SwapBuffers(wglGetCurrentDC()); }

Материал и освещение Графические библиотеки имитируют наличие в сцене источников света, вычисляя цвет каждой вершины грани с учетом положения и других характеристик источников света, материала вершины, направления нормали в вершине и направления из вершины в позицию наблюдателя. Цвет промежуточных точек грани вычисляется путем линейной интерполяции цвета вершин (закраска по Гуро). С помощью шейдеров разработчик приложения может организовать передачу в pixel-шейдер линейно интерполированного значения нормали и вычислять освещенность каждого пиксела (закраска по Фонгу).


⇐ Предыдущая| |Следующая ⇒