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


DirectSD - часть 13


D3DVAL( 0.0), D3DVAL( 0.0) }, { D3DVAL( O.I), D3DVAL( 0.4), D3DVAL( 0.3),

D3DVAL( 0.0), D3DVAL( 1.0), D3DVAL( 0.0),

D3DVAL( 0.0), D3DVAL( 0.0) } };

int nVerts = sizeof(vShape) / sizeof(D3DVERTEX);

Для нашего объекта создается список вершин. Объект содержит четыре вершины, для каждой из которых задается вектор нормали. Он используется в модуле освещения и при наложении покрытий (не рассматриваемых в данном примере).

// Задать материал фигуры CMaterial mShape;

mShape.Create(m_pIEngine, m_pIDevice) ;

mShape.SetColor(0.0, 1.0, 0.0); // Светло-зеленый

Приложение DSDEval '''Щ:. 319

Не забывайте о том, что описание материала состоит из структуры данных в адресном пространстве приложения, а также из внешнего объекта, представленного логическим номером.

// Создать буфер выполнения CExecute ex (m_pIDevice, ni_pIViewport) ;

// Добавить в буфер данные о вершинах ex.AddVertices(vShape, nVerts)';

Моя реализация класса для буфера выполнения (CExecute) требует, чтобы заполнение буфера начиналось с вершин.

// Создать матрицу для мирового преобразования поворота CMatrix mRot(m_pIDevice);

double ry = 1; // Градусы вокруг оси у double siny = sinfry * D2R);

double cosy = cos(ry * D2R);

mRot._ll = D3DVAL(cosy);

mRot._13 = D3DVAL(-siny) ;

mRot._31 = D3DVAL(siny);

mRot._33 = D3DVAL(cosy);

mRot.Update() ;

// Команда умножения мировой матрицы

//на матрицу поворота

ex.AddMatMul(m mWorld, m mWorld, mRot);

Матрица включается в буфер выполнения как часть команды, умножающей мировую матрицу на заданную. Результат присваивается мировой матрице. После выполнения этой команды макет поворачивается на один градус вокруг оси у.

// Добавить описание материала в буфер выполнения ex.AddMaterial(mShape) ;

// Добавить команду обработки вершин, чтобы каждая

//из них

// была преобразована и освещена

ex.AddProcess(nVerts, О,

D3DPROCESSVERTICES_TRANSFORMLIGHT¦ D3DPROCESSVERTICES_UPDATEEXTENTS) ;

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




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



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