netlib.narod.ru< Назад | Оглавление | Далее >

4.3. Затенение

Затенение (shading) выполняется во время растеризации и определяет каким образом цвет вершин будет использоваться при вычислении цвета каждого из образующих примитив пикселей. Обычно используются два метода затенения: равномерное и затенение по методу Гуро.

При равномерном затенении все пиксели примитива окрашиваются в цвет, заданный для первой вершины примитива. Так что треугольник, образованный перечисленными ниже тремя вершинами, будет красным, поскольку его первая вершина — красная. Цвета второй и третьей вершин при равномерном затенении игнорируются.

ColorVertex t[3];
t[0]._color = D3DCOLOR_XRGB(255, 0, 0);
t[1]._color = D3DCOLOR_XRGB(0, 255, 0);
t[2]._color = D3DCOLOR_XRGB(0, 0, 255);

При равномерном затенении объекты выглядят угловатыми, поскольку нет плавных переходов от одного цвета к другому. Более качественным вариантом является затенение по алгоритму Гуро (также называемое гладким затенением). При затенении по методу Гуро цвета каждой точки определяются путем линейной интерполяции цветов вершин примитива. На рис. 4.2 показаны два треугольника: один закрашен с использованием равномерного затенения, а другой — с использованием затенения по методу Гуро.


Рис. 4.2. Затенение треугольной грани

Рис. 4.2. Слева равномерное затенение треугольника красным цветом. Справа треугольник с вершинами красного, зеленого и синего цвета, затенение которого выполнялось по методу Гуро; обратите внимание на интерполяцию цветов


Подобно многим другим вещам в Direct3D, режим затенения устанавливается через механизм режимов визуализации Direct3D.

// включение равномерной заливки
Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);

// включение заливки по методу Гуро
Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);

netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz