三角形列表
三角形列表是独立三角形的列表。 它们可能或可能彼此不近。 三角形列表必须至少有三个顶点,并且顶点总数必须以三个分隔。
使用三角形列表创建由不相交部分组成的对象。 例如,在 3D 游戏中创建力场墙的一种方法是指定一个大型的未连接三角形列表。 然后应用一个材料和纹理,该材料和纹理似乎向三角形列表发出光。 墙中的每个三角形都显得发光。 墙后面的场景在三角形之间的缝隙中变得部分可见,因为玩家在查看力场时可能会期待。
三角形列表还可用于创建具有尖锐边缘且带有 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}
};
下面的代码示例演示如何使用 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}
};
相关主题