Светлые свойства (Direct3D 9)
Свойства освещения описывают тип и цвет источника света. В зависимости от типа используемого источника его свет может иметь свойства затухания и дальности действия, а также эффектов узконаправленности. Но не все типы огней используют все свойства. Direct3D использует структуру D3DLIGHT9 для передачи сведений о свойствах света для всех типов источников света. В этом разделе содержатся сведения обо всех свойствах света. Сведения делятся на следующие группы.
Свойства расположения, дальности действия и затухания определяют положение источника света в пространстве и поведение излучаемого им светового потока на расстоянии. Как и все свойства света, используемые в C++, они содержатся в структуре D3DLIGHT9 освещения.
Затухание света
Затухание определяет, как интенсивность света снижается по мере удаления от источника к максимальному расстоянию, заданному в свойстве дальности действия. Три элемента структуры D3DLIGHT9 представляют затухание света: Attenuation0, Attenuation1 и Attenuation2. Эти члены содержат значения с плавающей запятой в диапазоне от 0,0 до бесконечности, управляя затуханием света. Некоторые приложения задают члену Attenuation1 значение 1,0, а другие — 0,0, что определяет интенсивность света, изменяющуюся в пропорции 1 / D, где D — расстояние от источника света до вершины. Максимальная интенсивность света достигается в его источнике, и затем она уменьшается до значения 1 / (дальность действия) по мере удаления от источника. Как правило, приложение присваивает attenuation0 значение 0,0, Attenuation1 — константу, а attenuation2 — 0,0.
Для получения более сложных эффектов затухания можно комбинировать различные значения затухания. Также можно задать значения за пределами стандартного диапазона, чтобы создать еще более необычные эффекты затухания. Однако отрицательные значения затухания не допускаются. См. статью Затухание и фактор внимания (Direct3D 9).
Цвет освещения
Источники света в Direct3D излучают три цвета, которые используются независимо друг от друга в расчетах освещения системы: рассеянный цвет, фоновый цвет и отраженный цвет. Каждый из них интегрирован в модуль освещения Direct3D, взаимодействует с другими компонентами из текущего материала и создает окончательный цвет, используемый во время отрисовки. Рассеянный цвет взаимодействует со свойством рассеивающей отражающей способности текущего материала, отраженный цвет — со свойством зеркальной отражающей способности материала и т. д. Конкретные сведения о том, как Direct3D применяет эти цвета, см. в разделе Математика освещения (Direct3D 9).
В приложении C++ структура D3DLIGHT9 включает три элемента для этих цветов : Диффузный, Окружающий и Зеркальный. Каждый из них является структурой D3DCOLORVALUE , которая определяет издаваемый цвет.
Наиболее значимым типом цвета, применяемым в системных вычислениях, является рассеянный цвет. Самым распространенным рассеянным цветом является белый (R:1,0 G:1,0 B:1,0), но можно создавать различные цвета, необходимые для достижения нужного эффекта. Например, можно использовать для красный свет для камина или зеленый для разрешающего сигнала светофора.
Как правило, цветовым компонентам освещения присваиваются значения от 0,0 до 1,0 включительно, но это не является обязательным требованием. Например, можно задать для всех компонентов значение 2.0, создавая свет, который "ярче белого". Этот тип параметра может быть особенно полезен при использовании параметров затухания, отличных от константы.
Обратите внимание, что хотя Direct3D использует значения RGBA для освещения, компонент альфа-цвета не используется.
Обычно для освещения используются цвета материалов. Тем не менее, вы можете задать переопределение цветов материалов — излучаемых, фоновых, рассеянных и отраженных — рассеянными или отраженными цветами вершин. Это можно сделать, вызвав SetRenderState и задав переменные состояния устройства, перечисленные в следующей таблице.
Переменная состояния устройства | Значение | Тип | По умолчанию |
---|---|---|---|
D3DRS_AMBIENTMATERIALSOURCE | Определяет, где получить цвет окружающего материала. | D3DMATERIALCOLORSOURCE | D3DMCS_MATERIAL |
D3DRS_DIFFUSEMATERIALSOURCE | Определяет, где получить цвет рассеянного материала. | D3DMATERIALCOLORSOURCE | D3DMCS_COLOR1 |
D3DRS_SPECULARMATERIALSOURCE | Определяет, где получить цвет зеркального материала. | D3DMATERIALCOLORSOURCE | D3DMCS_COLOR2 |
D3DRS_EMISSIVEMATERIALSOURCE | Определяет, где получить цвет излучаемого материала. | D3DMATERIALCOLORSOURCE | D3DMCS_MATERIAL |
D3DRS_COLORVERTEX | Отключает или включает использование цветов вершин. | BOOL | TRUE |
Значение альфа-канала и прозрачности всегда поступает только из альфа-канала рассеянного цвета.
Значение дымки всегда поступает только из альфа-канала отраженного цвета.
D3DMATERIALCOLORSOURCE может иметь следующие значения.
- D3DMCS_MATERIAL — в качестве источника используется цвет материала.
- D3DMCS_COLOR1 — в качестве источника используется цвет диффузной вершины.
- D3DMCS_COLOR2 — в качестве источника используется цвет зеркальной вершины.
Направление света
Свойство направленности света определяет направление, в котором испускаемый объектом свет проходит через пространство. Направление используется только для направленных и прожекторных источников света и задается вектором.
Задайте направление света в элементе Направление структуры D3DLIGHT9 света. Элемент направления имеет тип D3DVECTOR. Векторы направления задаются как расстояния от логического начала координат независимо от расположения источника света в сцене. Таким образом узконаправленный прожектор, который светит прямо в сцену — вдоль положительной части оси Z, — имеет вектор направления <0,0,1> независимо от того, где задано его расположение. Аналогичным образом можно имитировать сияние солнечного света прямо в сцену, используя направленный свет с направлением <0,-1,0>. Очевидно, что вам не нужно создавать огни, которые светят вдоль осей координат; вы можете смешивать и сопоставлять значения, чтобы создать свет, который светит под более интересными углами.
Примечание
Несмотря на то что нормализация векторов направленности света не требуется, не забывайте задавать им какую-либо величину. Другими словами, не используйте вектор направленности <0,0,0>.
Расположение источника света
Положение света описывается с помощью структуры D3DVECTOR в элементе Position структуры D3DLIGHT9 . Предполагается, что координаты x, y и z находятся в мировом пространстве. Направленные источники света — это единственный тип источников, не использующих свойство расположения.
Дальность действия источника света
Свойство дальности действия источника света определяет расстояние в пространстве мира, после которого объекты сцены перестают получать свет, излучаемый этим источником. Элемент Range содержит значение с плавающей запятой, представляющее максимальный диапазон света в мировом пространстве. Направленные источники света не используют свойство дальности действия.
Связанные темы