三角形列表

三角形列表是隔离的三角形的列表。 它们可能彼此靠近,也可能不彼此靠近。 三角形列表必须至少拥有 3 个顶点,并且顶点总数必须可以被 3 整除。

使用三角形列表创建由非连续部分构成的对象。 例如,在 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}

};

下面的代码示例演示如何使用 IDirect3DDevice9::D rawPrimitive 在 Direct3D 9 中呈现此三角形列表。

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

基元