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


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

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

Используйте списки треугольников для создания объекта, состоящего из несвязанных частей. Например, один из способов создания стены принудительного поля в трехмерной игре заключается в том, чтобы указать большой список небольших, несвязанных треугольников. Затем примените материал и текстуру, которая, как представляется, выдает свет в список треугольников. Каждый треугольник в стене, как представляется, светится. Сцена за стеной становится частично видимой через пробелы между треугольниками, как игрок может ожидать при просмотре поля силы.

Списки треугольников также полезны для создания примитивов, которые имеют острые края и затеняются с заливкой Gouraud. См. векторы распознавания лиц и вершин (Direct3D 9).

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

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

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

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_TRIANGLELIST, 0, 2 );

Вы также можете использовать полосы треугольников для отрисовки треугольников, которые не подключены друг к другу. Для этого укажите дегенерный треугольник (т. е. треугольник с нулевым размером) в списке; При этом будет создана линия между двумя треугольниками, которые не будут отображаться во время отрисовки. Например, чтобы отобразить только первый и последний треугольник из предыдущего примера, инициализировать буфер вершин со следующими вершинами:

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}
};

Примитивы