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



         

Материалы - часть 2


Если объект поглощает все падающие на него лучи света, то он выглядит черным. Точно так же если объект полностью отражает все лучи (красный, синий и зеленый), то он выглядит белым. Поскольку ручное задание параметров материалов является скучным занятием, мы добавим в файлы d3dUtility.h/cpp несколько вспомогательных функций и глобальных констант материалов:

D3DMATERIAL9 d3d::InitMtrl(D3DXCOLOR a, D3DXCOLOR d, D3DXCOLOR s, D3DXCOLOR e, float p) { D3DMATERIAL9 mtrl; mtrl.Ambient = a; mtrl.Diffuse = d; mtrl.Specular = s; mtrl.Emissive = e; mtrl.Power = p; return mtrl; }

namespace d3d { . . . D3DMATERIAL9 InitMtrl(D3DXCOLOR a, D3DXCOLOR d, D3DXCOLOR s, D3DXCOLOR e, float p);

const D3DMATERIAL9 WHITE_MTRL = InitMtrl(WHITE, WHITE, WHITE, BLACK, 8.0f);

const D3DMATERIAL9 RED_MTRL = InitMtrl(RED, RED, RED, BLACK, 8.0f);

const D3DMATERIAL9 GREEN_MTRL = InitMtrl(GREEN, GREEN, GREEN, BLACK, 8.0f);

const D3DMATERIAL9 BLUE_MTRL = InitMtrl(BLUE, BLUE, BLUE, BLACK, 8.0f);

const D3DMATERIAL9 YELLOW_MTRL = InitMtrl(YELLOW, YELLOW, YELLOW, BLACK, 8.0f); }

ПРИМЕЧАНИЕ

По адресу http://www.adobe.com/support/techguides/color/colortheory/main.html находится замечательная статья, посвященная теории цвета, освещению и тому, как человеческий глаз различает цвета.

В структуре данных вершины нет членов данных для задания свойств материала; вместо этого нам надо задать используемый материал с помощью метода IDirect3DDevice9::SetMaterial(CONST D3DMATERIAL9* pMaterial).

Если мы хотим визуализировать несколько объектов, используя различные материалы, нам надо написать следующее:

D3DMATERIAL9 blueMaterial, redMaterial;

...// инициализация структур материалов

Device->SetMaterial(&blueMaterial); drawSphere(); // синяя сфера

Device->SetMaterial(&redMaterial); drawSphere(); // красная сфера




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