Полосы треугольников
Полоса треугольников — это ряд соединенных треугольников. Поскольку треугольники соединены, приложению не нужно постоянно указывать все три вершины для каждого треугольника. Например, для определения следующей полосы треугольников достаточно семи вершин.
Система использует вершины v1, v2 и v3 для рисования первого треугольника; v2, v4 и v3 для рисования второго треугольника; v3, v4 и v5 для рисования третьего треугольника; v4, v6 и v5 для рисования четвертого треугольника и т. д. Обратите внимание, что вершины второго и четвертого треугольников идут не по порядку; это необходимо для того, чтобы все треугольники рисовались в направлении по часовой стрелке.
Большинство объектов в 3D-сценах состоят из полос треугольников. Это связано с тем, что полосы треугольников можно использовать для задания сложных объектов так, чтобы память и процессорное время использовались эффективно.
На следующем рисунке показана отрисованная полоса треугольников.
В следующем коде показано, как создать вершины для такой полосы треугольников.
struct CUSTOMVERTEX
{
float x,y,z;
};
CUSTOMVERTEX Vertices[] =
{
{-5.0, -5.0, 0.0},
{ 0.0, 5.0, 0.0},
{ 5.0, -5.0, 0.0},
{10.0, 5.0, 0.0},
{15.0, -5.0, 0.0},
{20.0, 5.0, 0.0}
};
В приведенном ниже примере кода показано, как отобразить эту полосу треугольника в Direct3D 9 с помощью IDirect3DDevice9::D rawPrimitive.
//
// It is assumed that d3dDevice is a valid
// pointer to a IDirect3DDevice9 interface.
//
d3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 4);
Используйте полосу треугольников для отрисовки треугольников, которые не связаны друг с другом. Для этого укажите вырожденный треугольник (т. е. треугольник, площадь которого равна нулю) в списке треугольников. Это создает линию между двумя треугольниками, которая не будет отображаться. Чтобы отобразить только первый и последний треугольники из предыдущего примера, измените буфер вершин, как показано ниже:
CUSTOMVERTEX Vertices[] =
{
{-5.0, -5.0, 0.0},
{ 0.0, 5.0, 0.0},
{ 5.0, -5.0, 0.0},
{ 5.0, -5.0, 0.0}, // degenerate triangle
{10.0, 5.0, 0.0}, // degenerate triangle
{10.0, 5.0, 0.0},
{15.0, -5.0, 0.0},
{20.0, 5.0, 0.0}
};
Связанные темы