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


Цвет и текстуры - часть 20


Код класса C3dChromeWrap находится в файле 3dlmage.cpp и состоит из двух основных частей: создание покрытия и наложение его при перемещении объекта. Покрытие задается следующим образом:

BOOL C3dChromeWrap::Create(C3dShape* pShape,

C3dCamera* pCamera) f

if (!C3dWrap::Create(D3DRMWRAP_CHROME,

pCamera,

О, О, О,

О, 1, О,

О, 0, -1,

О, О,

1, -1)) (

/b> Щр* Глава 8. Цвет и текстуры

return FALSE;

// Задать функцию косвенного вызова для перемещения ASSERT(pShape) ;

m_p3hape = pShape;

IDirect3DRMFrame* pIFrame = pShape-»Get!nterface () ;

ASSERT(pIFrame) ;

m hr = pIFrame-»AddMoveCallback-(C3dChromeWrapCallback, - this);

return SUCCEEDED(m hr) ;

Начало фрагмента напоминает процесс создания покрытии другого типа, однако есть пара важных отличий. Верхний вектор имеет координаты О, О, -1, благодаря чему «соединительный шов» текстуры проходит в задней части объекта и невидим для вас. Если бы координаты этого вектора были равны О, О, 1, то в середине объекта появились бы раздражающие нарушения текстуры (зависящие от вида противоположных краев текстуры). Второй фокус заключается в том, что масштаб по оси у устанавливается равным -1, чтобы ориентация «отражений» на объекте совпадала с ориентацией фона (при условии, что в обоих случаях было использовано одинаковое изображение).

После создания покрытия следующим шагом является обращение к функции косвенного вызова фрейма AddMoveCallback. Давайте посмотрим, как работает функция косвенного вызова:

static void C3dChromeWrapCallback(IDirect3DRMFrame* pIFrame,

void* pArg, D3DVALUE delta) f

C3dChromeWrap* pThis = (C3dChromeWrap*) pArg;

ASSERT(pThis) ;

ASSERT (pThis-»IsKindOf (RUNTIME_CLASS (C3dChromeWrap) ) ) ;

pThis-»ApplyRelative (pThis-»m_pShape, pThis-»m pShape);

Обратите внимание — это статическая функция, не принадлежащая классу C3dChromeWrap. Соответственно, для нее не определен указатель this. Для передачи указателя this используется второй аргумент функции косвенного вызова, предоставляющий функции доступ к данным класса.




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



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