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

UptoLike

29
pD3DDevice->SetTransform(D3DTS_WORLD, &Worldl);
// Отображаем прямоугольник
pD3DDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 3, 2);
// Отключаем альфа-смешивание
pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, DWORD(FALSE));
}
В самом начале с помощью метода SetRenderState устанавливаем
параметры формирования сцены, а именно включаем альфа-смешивание. Для
этого в качестве первого параметра метода SetRenderState указываем значение
D3DRS_ALPHABLENDENABLE, а для включения смешения во втором
параметре указываем 1.
После разрешения смешивания цветов необходимо указать, как это должно
происходить. Для этого нужно установить параметры D3DRS_SRCBLEND
(источник смешения) и D3DRS_DESTBLEND (приемник смешения) с помощью
метода SetRenderState. В нашем случае вершины описаны только с помощью трех
составляющих цвета и канал Alpha не использовался, поэтому в качестве примера
параметрам D3DRS_SRCBLEND и D3DRS_DESTBLEND устанавливаем значение
D3DBLEND_ONE. При этом степень смешивания равна единице. Если какой- то
объект сцены не должен быть прозрачным, то можно указать значение
D3DBLEND_ZERO, т. е. смешения не будет.
Если в качестве смешения используется значение D3DBLEND_ONE, то в
смешении цветов участвует и фон, поэтому он не должен быть белым. Чтобы
эффект был более красивым, во время очистки буфера, в данном примере цвет
фона должен изменяться от черного к красному.
Теперь можно отображать сцену. Для этого сначала поворачиваем
мировую матрицу по часовой стрелке и устанавливаем буфер вершин:
pD3DDevice->SetStreamSource(0, vTriangleBuffer, 0, sizeof(sVertex));
pD3DDevice->SetFVF(D3DFVF_XYZ I D3DFVF_DIFFUSE);
В первой строке устанавливаем буфер вершин. Во второй строке ука-
зываем формат вершины, чтобы Direct3D знал, в каком формате мы сформи-
ровали буфер и что указано. Теперь можно переходить к отображению фигур.
Они у нас находятся в буфере вершин, начиная с нулевой вершины, поэтому
отображение будет выглядеть следующим образом:
pD3DDevice->DrawPrimitive(D3DPTJTRIANGLELIST, 0, 1);
Здесь мы вызываем метод DrawPrimitive для отображения примитивов. В
качестве базового будет использоваться список треугольников, потому что
первый параметр равен D3DPT_TRIANGLELIST. Рисовать нужно начиная с
нулевой вершины буфера, и всего один треугольник, для которого достаточно
трех вершин, и только они будут использоваться. Все остальные вершины в
буфере останутся пока не тронутыми.
Теперь поворачиваем мировую матрицу против часовой стрелки. Для этого
при указании угла поворота используем то же значение, только отрицательное, и
затем можно рисовать прямоугольник:
    pD3DDevice->SetTransform(D3DTS_WORLD, &Worldl);

    // Отображаем прямоугольник
    pD3DDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 3, 2);

    // Отключаем альфа-смешивание
    pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, DWORD(FALSE));
}
       В самом начале с помощью метода SetRenderState устанавливаем
параметры формирования сцены, а именно включаем альфа-смешивание. Для
этого в качестве первого параметра метода SetRenderState указываем значение
D3DRS_ALPHABLENDENABLE, а для включения смешения во втором
параметре указываем 1.
       После разрешения смешивания цветов необходимо указать, как это должно
происходить. Для этого нужно установить параметры D3DRS_SRCBLEND
(источник смешения) и D3DRS_DESTBLEND (приемник смешения) с помощью
метода SetRenderState. В нашем случае вершины описаны только с помощью трех
составляющих цвета и канал Alpha не использовался, поэтому в качестве примера
параметрам D3DRS_SRCBLEND и D3DRS_DESTBLEND устанавливаем значение
D3DBLEND_ONE. При этом степень смешивания равна единице. Если какой- то
объект сцены не должен быть прозрачным, то можно указать значение
D3DBLEND_ZERO, т. е. смешения не будет.
       Если в качестве смешения используется значение D3DBLEND_ONE, то в
смешении цветов участвует и фон, поэтому он не должен быть белым. Чтобы
эффект был более красивым, во время очистки буфера, в данном примере цвет
фона должен изменяться от черного к красному.
       Теперь можно отображать сцену. Для этого сначала поворачиваем
мировую матрицу по часовой стрелке и устанавливаем буфер вершин:
pD3DDevice->SetStreamSource(0, vTriangleBuffer, 0, sizeof(sVertex));
pD3DDevice->SetFVF(D3DFVF_XYZ I D3DFVF_DIFFUSE);
      В первой строке устанавливаем буфер вершин. Во второй строке ука-
зываем формат вершины, чтобы Direct3D знал, в каком формате мы сформи-
ровали буфер и что указано. Теперь можно переходить к отображению фигур.
Они у нас находятся в буфере вершин, начиная с нулевой вершины, поэтому
отображение будет выглядеть следующим образом:
pD3DDevice->DrawPrimitive(D3DPTJTRIANGLELIST, 0, 1);
       Здесь мы вызываем метод DrawPrimitive для отображения примитивов. В
качестве базового будет использоваться список треугольников, потому что
первый параметр равен D3DPT_TRIANGLELIST. Рисовать нужно начиная с
нулевой вершины буфера, и всего один треугольник, для которого достаточно
трех вершин, и только они будут использоваться. Все остальные вершины в
буфере останутся пока не тронутыми.
       Теперь поворачиваем мировую матрицу против часовой стрелки. Для этого
при указании угла поворота используем то же значение, только отрицательное, и
затем можно рисовать прямоугольник:
                                        29