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



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


BOOL C3dLight::SetColor(double r, double g, double b) {

ASSERT(m_pILight) ;

m_hr = m_pILight-»SetColorRGB(D3DVAL(r) , D3DVAL(g), D3DVAL(b));

return SUCCEEDED(m hr) ;

}

Макрос D3DVAL преобразует величины к формату с плавающей точкой, который используется в механизме визуализации.

IDirect3DRMWrap

Покрытие (wrap) определяет способ наложения текстуры на объект. Покрытия могут быть плоскими, цилиндрическими, сферическими и хромовыми. Для наложения покрытий (за исключением хромовых) на сетку используется функция Apply. Хромовое покрытие, предназначенное для имитации отражающих поверхностей, накладывается функцией ApplyRelative; при этом текстура ориентируется по отношению к фрейму, а не к объекту, благодаря чему достигается правильное поведение «отражений» даже при вращении объекта.

Покрытие также можно наложить на одну грань объекта. Ниже приводится функция (из файла 3dlmage.cpp), которая накладывает объект-покрытие C3dWrap на заданную грань объекта C3dShape:

BOOL C3dWrap::Apply(C3dShape* pShape, int nFace) {

ASSERT(pShape) ;

ASSERT(m_pIWrap) ;

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

// Получить список граней IDirect3DRMMeshBuiider* pIBId = pShape-»GetMeshBuilder () ;

ASSERT(pIBId) ;

IDirect3DRMFaceArray* pIFaces = NULL;

m_hr = pIBld-»GetFaces (&pIFaces) ;

ASSERT;SUCCEEDED(m_hr)) ;

// Выбрать из списка нужную грань 70 ЩЩУ Глава 3. Интерфейсы и классы

IDirect3DRMFace* pIFace = NULL;

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

ASSERT(SUCCEEDED(m_hr)) ;

// Наложить покрытие на грань m_hr = m_pIWrap-»Apply(pIFace);

ASSERT(SUCCEEDED(m_hr)) ;

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

pIFaces-»Release () ;

return SUCCEEDED(m_hr) ;

\

IDirect3DRMMaterial

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

В общем случае материал имеет два цвета: нормальный и цвет, присущий ему при сильном освещении. Посмотрите на зеленое яблоко при ярко-белом свете. Поверхность яблока выглядит зеленой за исключением тех мест, где на нее падает прямой свет — в этих участках она белая. Цвета, которые вы видите, обусловлены диффузными и зеркальными отражающими свойствами объекта, они имитируются с помощью материала. В главе 8 материалы рассматриваются более подробно.




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