Основы построения 3-х мерных сцен с использованием библиотеки DirectX. Макушкина Л.А - 25 стр.

UptoLike

27
Triangle[4].y=0.5f;
Triangle[4].z=0.1f;
Triangle[5].x=0.5f;
Triangle[5].y=0.5f;
Triangle[5].z=0.1f;
Triangle[6].x=0.5f;
Triangle[6].y=-0.5f;
Triangle[6].z=0.1f;
// Заполняем вершины цветами
Triangle[0].color = D3DCOLOR_XRGB(0, 0, 255);
Triangle[1].color = D3DCOLOR_XRGB(0, 255, 0);
Triangle[2].color = D3DCOLOR_XRGB(255, 0, 0);
Triangle[3].color = D3DCOLOR_XRGB(255, 0, 255);
Triangle[4].color = D3DCOLOR_XRGB(0, 255, 255);
Triangle[5].color = D3DC0L0R_XRGB(255, 255, 0);
Triangle[6].color = D3DCOLOR_XRGB(255, 255, 255);
// Создаем интерфейс буфера вершин
void * pBuf;
if (FAILED(pD3DDevice->CreateVertexBuffer(sizeof(sVertex) * 7,
D3DUSAGE_WRITEONLY, D3DFVF_XYZ|D3DFVF_DIFFUSE, D3DPOOL_DEFAULT,
svTriangleBuffer, 0))) return FALSE;
// Блокировка и заполнение вершинного буфера
if (FAILED(vTriangleBuffer->Lock(0, sizeof(sVertex) * 7, &pBuf, 0)))
return FALSE;
memcpy(pBuf, Triangle, sizeof(sVertex) * 7);
vTriangleBuffer->Unlock();
// Функция SetView задает матрицу отображения SetView();
Первые три вершины в массиве Triangle описывают треугольник.
Остальные четыреэто два треугольника, образующие прямоугольник. При
этом треугольники рисуются по вершинам 3, 4, 5 и 3, 5, 6. Далее задается цвет
вершин. Обратите внимание, что цвет каждой вершины разный.
Далее создается интерфейс вершин с помощью метода CreateVertexBuffer.
Для заполнения этого буфера блокируем буфер и переносим в него значения
вершин из массива Triangle с помощью WinAPI-функции memсру. В самом конце
вызывается функция SetView.
void SetView()
{
D3DMATRIX View={
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 1, 5, 1,
};
pD3DDevice->SetTransform(D3DTS_VIEW, &View);
}
Отображение сцены будет происходить по событию WM_PAINT:
case WM_PAINT:
Triangle[4].y=0.5f;
Triangle[4].z=0.1f;

Triangle[5].x=0.5f;
Triangle[5].y=0.5f;
Triangle[5].z=0.1f;

Triangle[6].x=0.5f;
Triangle[6].y=-0.5f;
Triangle[6].z=0.1f;
// Заполняем вершины цветами
Triangle[0].color = D3DCOLOR_XRGB(0, 0, 255);
Triangle[1].color = D3DCOLOR_XRGB(0, 255, 0);
Triangle[2].color = D3DCOLOR_XRGB(255, 0, 0);
Triangle[3].color = D3DCOLOR_XRGB(255, 0, 255);
Triangle[4].color = D3DCOLOR_XRGB(0, 255, 255);
Triangle[5].color = D3DC0L0R_XRGB(255, 255, 0);
Triangle[6].color = D3DCOLOR_XRGB(255, 255, 255);
// Создаем интерфейс буфера вершин
void * pBuf;
if (FAILED(pD3DDevice->CreateVertexBuffer(sizeof(sVertex) * 7,
D3DUSAGE_WRITEONLY, D3DFVF_XYZ|D3DFVF_DIFFUSE, D3DPOOL_DEFAULT,
    svTriangleBuffer, 0))) return FALSE;
// Блокировка и заполнение вершинного буфера
if (FAILED(vTriangleBuffer->Lock(0, sizeof(sVertex) * 7, &pBuf, 0)))
  return FALSE;
memcpy(pBuf, Triangle, sizeof(sVertex) * 7);
vTriangleBuffer->Unlock();
// Функция SetView задает матрицу отображения SetView();
      Первые три вершины в массиве Triangle описывают треугольник.
Остальные четыре — это два треугольника, образующие прямоугольник. При
этом треугольники рисуются по вершинам 3, 4, 5 и 3, 5, 6. Далее задается цвет
вершин. Обратите внимание, что цвет каждой вершины разный.
      Далее создается интерфейс вершин с помощью метода CreateVertexBuffer.
Для заполнения этого буфера блокируем буфер и переносим в него значения
вершин из массива Triangle с помощью WinAPI-функции memсру. В самом конце
вызывается функция SetView.
void SetView()
{
  D3DMATRIX View={
    1, 0, 0, 0,
    0, 1, 0, 0,
    0, 0, 1, 0,
    0, 1, 5, 1,
  };
  pD3DDevice->SetTransform(D3DTS_VIEW, &View);
}
      Отображение сцены будет происходить по событию WM_PAINT:
case WM_PAINT:

                                        27