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


DirectSD - часть 10


D3DFILLJ30LID) ;

exi.AddRenderState(D3DRENDERSTATE_SHADEMODE,

D3DSHADE_GOURAUD) ;

exi.AddRenderState(D3DRENDERSTATE_DITHERENABLE, 1) ;

// Разрешить использование Z-буфера exi.AddRenderState(D3DRENDERSTATE_ZENABLE, 1) ;

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

Далее необходимо определить, как будет воспроизводиться макет. Я выбрал сплошное заполнение с закраской Гуро и разрешил смешение цветов в RGB-режиме. Существует множество других опций, которые также можно изменять, однако именно выбранные мной параметры более всего влияют на внешний облик макета. Полный перечень установок визуализации можно найти в документации DirectX 2 SDK. Кроме того, я разрешил использование созданного ранее Z-буфера.

// Создать матрицу мирового преобразования (единичную) m_mWorld.Create(m_pIDevice) ;

exl.AddState(D3DTRANSFORMSTATE_WORLD, m_mWorld) ;

// Создать проекционную матрицу.

// Примечание: Это было сделано ранее, при настройке

// параметров ракурса, однако при выборе режимов

// заполнения

//и закраски данные ракурса были сброшены.

m_mProjection.Create(m_pIDevice);

m_mProjection._ll = D3DVAL(2);

m_mProjection._22 = D3DVAL(2);

m_mProjection._34 = D3DVAL(1);

m_mProjection._43 = D3DVAL(-1);

m_mProjection._44 = D3DVAL(0);

m_mProj ection.Update();

/b> ЩЦ' Глава 13. Direct3D

exI.AddState(D3DTRANSFORMSTATE_PROJECTION, m mProjection);

// Задать матрицу вида (положение камеры) m mView.Create(m_pIDevice) ;

m_mView._43 = D3DVAL(2); // Camera Z = -2;

m_mView.Update() ;

exi.AddState(D3DTRANSFORMSTATE_VIEW, m_mView) ;

Приведенный выше фрагмент определяет матрицы (мировую, проекционную и матрицу вида). В начале матрицы являются единичными, благодаря чему в дальнейшем можно заполнять лишь те элементы матриц, которые не совпадают с элементами единичной матрицы. Имена переменных класса, _43 и т. д., взяты из структуры Direct3D под названием D3DMATRIX, для которой класс CMatrix является производным.

// Добавить команду для задания уровня рассеянного освещения exI.AddAmbLight(RGB_MAKE(64, 64, 64));




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



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