Введение в программирование трехмерных игр с DX9



         

Материалы


Цвет объектов, которые мы видим в реальном мире, определяется цветом отражаемого ими света. Например, красный шар выглядит красным потому что он поглощает все лучи света, кроме красных. Красный свет отражается от шара и попадает в глаз зрителя, и поэтому мы считаем, что шар красный. В Direct3D данное явление моделируется путем задания материала объекта. Материал позволяет задать отражающую способность поверхности. В коде материал представляется с помощью структуры D3DMATERIAL9.

typedef struct _D3DMATERIAL9 { D3DCOLORVALUE Diffuse, Ambient, Specular, Emissive; float Power; } D3DMATERIAL9;

Diffuse — Задает количество отражаемого поверхностью рассеиваемого света.

Ambient — Задает количество отражаемого поверхностью фонового света.

Specular — Задает количество отражаемого поверхностью отражаемого света.

Emissive — Данный компонент позволяет увеличивать значения цветов, что создает эффект свечения поверхности.

Power — Задает резкость зеркальных отражений; чем больше значение, тем более резкими будут отражения.

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

D3DMATERIAL9 red; ::ZeroMemory(&red, sizeof(red)); red.Diffuse = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f); // красный red.Ambient = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f); // красный red.Specular = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f); // красный red.Emissive = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f); // нет свечения red.Power = 5.0f;

Здесь мы присваиваем зеленой и синей составляющим 0, указывая, что материал полностью поглощает лучи света данных цветов. Красной составляющей мы присваиваем значение 1, а это значит, что лучи данного цвета полностью отражаются поверхностью. Обратите внимание,что мы можем контроллировать степень отражения для каждой составляющей освещения (фоновой, рассеиваемой и отражаемой).

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


Содержание  Назад  Вперед