Списки треугольников
Список треугольников — это список изолированных треугольников. Они могут быть или не могут быть рядом друг с другом. Список треугольников должен быт иметь как минимум три вершины, а общее количество вершин должно делиться на три.
Используем списки треугольников для создания объекта, состоящего из несмежных элементов. Например, один из способов создать силовую стену в 3D-игре — это задать большой список маленьких, несвязных треугольников. Затем необходимо применить к списку треугольников материал и текстуру, которые создают впечатление излучаемого света. Кажется, что каждый треугольник в стене светится. Сцена за стеной становится частично видимой через пробелы в треугольниках; именно таким образом игроки привыкли видеть силовое поле.
Списками треугольников также удобно пользоваться для создания примитивов, имеющих острые ребра и затененных по методу Гуро. См. раздел Нормальные векторы лиц и вершин (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 с помощью IDirect3DDevice9::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}
};
Связанные темы