Поделиться через


Полосы треугольников

Полоса треугольников — это ряд соединенных треугольников. Поскольку треугольники соединены, приложению не нужно постоянно указывать все три вершины для каждого треугольника. Например, для определения следующей полосы треугольников достаточно семи вершин.

иллюстрация полосы треугольников с семью вершинами

Система использует вершины 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}
};

Примитивы