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


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


Рисунок. 3-2. Проекционная система


68

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

Функция SetProjection определяет, следует ли применять к изображению корректировку перспективы, или же объекты должны воспроизводиться в простой ортогональной проекции. В большинстве случаев следует пользоваться перспективной проекцией для повышения реализма. Коррекция перспективы рассматривается в главе 8, где мы будем изучать наложение текстур.

Помимо определения исходных условий, основное назначение этого интерфейса связано с выбором объектов в макете. Функция Pick определяет, какой объект (если он имеется) лежит под заданной точкой экрана. Мы подробнее рассмотрим эту функцию в главе 7.

IDirect3DRMFace

Интерфейс IDirect3DRMFace позволяет определить или задать атрибуты одной грани трехмерного объекта. Например, вы можете задать цвет грани функцией SetColor, или же получить вектор, направленный по нормали к ней, функцией GetNormal. Для получения указателя на интерфейс IDirect3DRMFace обычно следует запросить у интерфейса IDirectSDRMMeshBuiIder список граней, после чего выбрать из возвращаемого массива одну конкретную грань. Присвоение цвета грани в функции C3dShape::SetFaceColor происходит следующим образом:

BOOL C3dShape::SetFaceColor(int nFace, double r, double g,

double b) {

if (nFace »= GetFaceCount()) return FALSE;

// Получить список граней IDirect3DRMFaceArray* pIFaces = NULL;

ASSERT<m_pIMeshBld) ;

m_hr = m_pIMeshBld-»GetFaces (&pl Faces);

ASSERT(SUCCEEDED(m_hr)) ;

// Выбрать из списка нужную грань IDirect3DRMFace* pIFace = NULL;

m_hr = pIFaces-»GetElement (nFace, SpIFace);

ASSERT(SUCCEEDED(m_hr)) ;

// Задать цвет грани m_hr = pIFace-»SetColorRGB(r, g, b) ;

ASSERT(SUCCEEDED(m_hr)) ;

// Освободить интерфейсы грани и списка граней pIFace-»Release () ;

pIFaces-»Release () ;

return TRUE;

Интерфейсы трехмерной графики ^fit 69

IDirect3DRMLight

Интерфейс IDirect3DRMLight предназначен для управления различными источниками света, поддерживаемыми механизмом визуализации (источники света более подробно рассматриваются в главе 10). Источник света может обладать различными характеристиками, от цвета до закона изменения интенсивности с расстоянием. Приведу простой пример установки цвета источника в функции C3dLight::SetColor:




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



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