三角形列表
三角形列表是隔离的三角形的列表。 它们可能彼此靠近,也可能不彼此靠近。 三角形列表必须至少拥有 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}
};
相关主题