Составители:
Рубрика:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 25
- 26
- 27
- 28
- 29
- …
- следующая ›
- последняя »