ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX


Интерфейсы и классы - часть 23


m_pScene = new C3dScene;

if ( !m_pScene-»Create () ) return FALSE;

// Установить источники света C3dDirLight dl;

dl.Create(0.8, 0.8, 0.8);

m_pScene-»AddChild(&dl) ;

dl.SetPosition(-2, 2, -5);

dl.SetDirection(1, -1, 1);

m_pScene-»SetAmbientLight (0.4, 0.4, 0.4);

m wnd3d.SetScene(m pScene);

C3dVector

В механизме визуализации определен трехмерный вектор D3DVECTOR, который представляет собой обычную структуру, однако я предпочитаю работать с векторными объектами C++. При таком подходе я могу иметь несколько конструкторов, упрощающих создание вектора, и, конечно же, реализовать операторы (например, сложения и умножения) для упрощения кода. Класс C3dVector является производным от структуры D3DVECTOR, так что во всех случаях, где допускается присутствие структуры D3DVECTOR, вы можете пользоваться объектом C3dVector. В качестве примера использования класса C3dVector приведу фрагмент программы, который обновляет положение трехмерного объекта, перемещаемого пользователем по экрану:

C3dVector d, u;

pFrame-»GetDirection (d, и, pStage);

// Повернуть вектор направления и верхний вектор double a = 3.0;

C3dMatrix r;

r.Rotate(-st.dR * a, -st.dU * a, -st.dv * a) ;

d = r * d;

u = r * u;

pFrame-»SetDirection (d, u, pStage);

Использование классов для работы с векторами (и матрицами) заметно упрощает программу. Учтите, что понимание всех тонкостей их работы потребует некоторых усилий. Мы вернемся к этой теме в главе 6, где научимся перемещать объекты по желанию пользователя.

86 в¦?' Глава 3. Интерфейсы и классы

Классы DirectDraw в библиотеке 3d Plus

В библиотеку 3dPlus входит несколько классов для поддержки интерфейсов DirectDraw. Эти классы изображены на Рисунок 3-4.

Рисунок. 3-4. Вспомогательные классы DirectDraw из библиотеки 3dPlus


Такие классы представляют собой простейшие оболочки над базовыми интерфейсами DirectDraw (более подробное описание интерфейсов DirectDraw можно найти в главе 12). Код, реализующий эти классы, находится в файле 3dDirDraw.cpp в каталоге с исходными текстами библиотеки 3dPlus. При его написании я взял за основу код приложения VIEWER, входящего в комплект DirectX 2 SDK. Я реализовал лишь минимальный набор функций, обеспечивающий работу моего класса CSdDevice. Разумеется, вы обладаете полным правом просмотреть исходный текст и сделать с ним все, что сочтете нужным.




Начало  Назад  Вперед



Книжный магазин