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


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

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

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

Система использует вершины версии 1, v2 и v3 для рисования первого треугольника; v2, v4 и v3 для рисования второго треугольника; 3, v4 и v5 для рисования третьего; 4, v6 и v5, чтобы нарисовать четвертый; и т. д. Обратите внимание, что вершины второго и четвертого треугольников не упорядочены; Это необходимо, чтобы убедиться, что все треугольники рисуются в ориентации по часовой стрелке.

Большинство объектов в трехмерных сценах состоят из полос треугольников. Это связано с тем, что полосы треугольников можно использовать для указания сложных объектов таким образом, чтобы эффективно использовать память и время обработки.

На следующем рисунке показана отрисовка полосы треугольника.

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

В следующем коде показано, как создать вершины для этой полосы треугольника.

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 с помощью IDirect3Device9::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}
};

Примитивы