三角形条带

三角形带是一系列连接的三角形。 由于这些三角形是连接的,因此应用程序不需要为每个三角形重复指定所有三个顶点。 例如,只需 7 个顶点即可定义以下三角形带。

具有 7 个顶点的三角形带的图示

系统使用顶点 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}
};

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

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

基元