Чтобы увидеть, как треугольники образуют куб, можно включить отображение куба в проволочном виде, когда треугольники не закрашиваются

UINT PrimitiveCount

UINT StartIndex,

UINT NumVertices,

UINT MinIndex,

INT BaseVertexIndex,

D3DPRIMITIVETYPE Туре,

HRESULT DrawIndexedPrimitive(

UINT Stride

UINT OffsetInBytes,

UINT StreamNumber,

HRESULT SetStreamSource(

0, 0, 0, 1,

Для того, чтобы поворачивать сцену и куб на сцене применим матрицу мира (World Matrix), которая влияет не на точку, из которой мы смотрим на мир, а на сам виртуальный мир.

D3DMATRIX World = {

cos(b)*cos(b), cos(b)*sin(b), sin(b), 0,

-sin(b), cos(b), 0, 0,

-sin(b)*cos(b), -sin(b)*sin(b), cos(b), 0,

};

3) Для установки матрицы используется метод SetTransform, только первый параметр должен быть равен d3dts_world, а второй — указатель на устанавливаемую матрицу мира.


4) Для отображения созданного куба на устройстве Direct3D необходимо указать интерфейсу IDirect3DDevice9, что нужно использовать созданный нами ранее буфер вершин и индексов.

А) Для этого с помощью метода SetFVF задаем формат описания вершин в нашем буфере. Этой функции нужно передать в качестве параметра флаги, которые определят формат вершины. У нас вершины состоят из координат X, Y и Z и рассеянного цвета, поэтому в качестве параметра функции нужно указать два флага: D3DFVF_XYZ и D3DFVF_DIFFUSE.

Б) Указываем вершинный буфер с помощью метода SetStreamSource. Этот метод выглядит следующим образом:

IDirect3DVertexBuffer9 *pStreamData,

);

Здесь имеются следующие четыре параметра:

StreamNumber— номер потока данных, который может изменяться от 0 до максимального количества потоков минус 1;

pStreamData — указатель на буфер вершин;

OffsetInBytes — смещение в байтах от начала в буфере вершин, начиная с которого необходимо начать копирование;

Stride — шаг, или размер вершины.

В нашем случае вызов выглядит следующим образом:

pD3DDevice->SetStreamSource(0, vBuffer, 0, sizeof(sVertex));

В) Указываем интерфейсу IDirect3DDevice9 буфер индексов с помощью метода SetIndices. У этого метода только один параметр — указатель на буфер индексов.


5) Установив все необходимые буферы, нужно их прорисовать с помощью метода DrawIndexedPrimitive:

};

Здесь имеются следующие параметры:

a) Tуре — тип примитивов, которые нужно использовать. В данном случае можно указать одно из перечисленных значений:

D3DPT_POINTLIST — в буфере находятся координаты точек. Каждая координата — это отдельная точка;

D3DPT_LINELIST — в буфере находятся координаты линий. Каждая пара координат в буфере образует линию;

D3DPT_LINESTRIP — в буфере находятся координаты связанных линий, при этом конец первой линии является началом следующей;

D3DPT_TRIANGLELIST — в буфере находятся координаты треугольников. Каждые три точки определяют треугольник;

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

D3DPT_TRIANGLEFAN — треугольники формируются на основе смежных сторон;


b) BaseVertexIndex — смещение от начала буфера, где находится первый индекс;

c) MinIndex— минимальный индекс точки в буфере, который должен отображаться;

d) NumVertices — количество вершин;

e) StartIndex — расположение индекса в буфере индексов, начиная с которого нужно начинать чтение;

f) PrimitiveCount— количество примитивов, которые нужно создать. В нашем случае будет 12 треугольников, поэтому желательно создать константу, которую легко можно будет редактировать, в случае увеличения или уменьшения количества примитивов.

Результат работы программы (рис. 2.11):

Рис. 2.11. Построение треугольников в разном направлении


Для этого необходимо добавить следующую строку кода перед вызовом метода DrawIndexedPrimitive:

pD3DDevice->SetRenderState(D3DRS_FILLMODE,

D3DFILL_WIREFRAME);

В результате на экране будет построен прямоугольник, показанный на рис. 2.12.

Рис. 2.12. Построение треугольников в разном направлении.

Самостоятельно на практике: Разработать Windows-приложение, вращающее равностороннюю пирамиду. Каждая сторона её должна быть окрашена в свой цвет.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: