Назначение поля Power аналогично параметру «блеск» в OpenGL. Зеркальное освещение получается наиболее интенсивным, если отраженный луч проходит через точку наблюдения. Когда положение наблюдателя отклоняется от траектории отраженного луча, вклад зеркального освещения в цвет пиксела падает. Разработчик управляет скоростью падения освещенности при перемещении наблюдателя при помощи изменения значения поля Power.

Один из описанных таким образом материалов передается конвейеру в качестве текущего, и его поля используются для вычисления цвета пикселов. При создании объекта Direct3D по умолчанию в конвейер заносится материал с компоЗадание освещенности нентами диффузного цвета, равными единице, и с нулями во всех других полях структуры D3DMATERIAL9.

Чтобы зеркальный цвет участвовал в расчете освещения, недостаточно задать его значения в источнике света и материале. Надо также включить выполнение соответствующих расчетов при помощи метода Devi ce->SetRenderState(D3DRS_SPE-CULARENABLE, TRUE). По умолчанию этот режим отключен, видимо, для уменьшения затрат времени на расчет освещенности.

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

Device->SetRenderState(D3DRS_ AMBIENTMATERIALSOURCE. 3DMCSJ30L0R2)

В процессе расчетов должны участвовать четыре типа цвета (Ambient, Diffuse, Specul аг и Emi ssi on). С учетом четырех полей материала и двух кодов из вершины у нас имеется шесть возможных значений. Для выбора четырех из них первым параметром метода SetRenderState() задается тип цвета, а во втором параметре указывается источник его получения. Первый параметр может принимать одно из четырех значений: О D3DRS_AMBIENTMATERIALS0URCE; О D3DRS_DIFFUSEMATERIALSOURCE; О D3DRS_SPECULARMATERIALS0URCE; О D3DRSJMISSIVEMATERIALS0URCE.


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