Значения второго параметра перечислены в следующем списке: О D3DMCS_C0L0R1 - первый код цвета из вершины; О D3DMCS_C0L0R2 - второй код цвета из вершины; О D3DMCS_MATERIAL - поле материала, соответствующее первому параметру.

Оба кода цвета, заданные в вершинах, можно исключить из расчетов цвета. Запрет использования цвета вершин устанавливается при помощи вызова Devi ce->Set-RenderState(D3DRS_C0L0RVERTEX,FALSE). В тех ситуациях, когда цвет не рассчитывается, а только читается из вершины, этот вызов просто игнорируется. Если же нужно разрешить использовать цвет вершин, то следует воспользоваться вызовом функции Device->SetRenderState(D3DRS_C0L0RVERTEX.TRUE).

В вершине может храниться не больше двух цветов, но отражательные свойства реальных материалов обычно одинаковы для рассеянного и диффузного освещения, поэтому первый код цвета можно назначить для расчета результата и рассеянного, и диффузного освещения при помощи следующего фрагмента кода:

Device->SetRenderState(D3DRS_AMBIENTMATERIALSOURCE. 3DMCS_C0L0R1); Device->SetRenderState(D3DRS_DIFFUSEMATERIALS0URCE. 3DMCS_C0L0R1):

В этом случае второй код можно использовать для назначения зеркального цвета. Обычно, чтобы цвет блика совпадал с цветом падающего луча, зеркальный цвет назначают белым или серым.

Применение библиотеки DirectX

Можно провести небольшой эксперимент и определить приоритет операций для выбора цвета, если методы вызваны в следующем порядке:

SetRenderState(D3DRS_ DIFFUSEMATERIALSOURCE. 3DMCS_C0L0R1). SetRenderState(D3DRS_C0L0RVERTEX.FALSE).

Всех описанных выше настроек и занесения данных в конвейер еще недостаточно, так как цвет вершин будет вычисляться, только если расчет освещенности включен при помощи вызова функции Devi се->SetRenderState(D3DRS_LIGHTING. TRUE). Если же расчет выключен при помощи метода Devi ce->SetRenderState( D3DRS_L IGHTING, FALSE), то код цвета читается из вершины без преобразований. Включение зеркального освещения при помощи метода SetRenderState(D3DRS_SPECULARENABLE, TRUE) приводит к суммированию первого и второго кодов цвета. Демонстрация различных вариантов вычисления освещенности находится в проекте DirectX_Lighting.


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