设置顶点缓冲器(Vertex Buffer)
在前面的“转换模型坐标到视点坐标”一节里,需要渲染的物体的顶点数据全部打包放在一个顶点缓冲器里。在渲染阶段调用的DrawPrimitive方法使用了顶点缓冲器里的这些信息来进行渲染。指定的图元(primitive)类型必须要匹配顶点在缓冲器里放置的方式,这样才能得到想要的结果。
五个基本的图元类型可以用来渲染:点、线、三角形列表、三角形带和三角形扇。点图元用来在屏幕上绘制单个的像素,例如当你想描述夜空或者太空的星星时。另一个更加流行的用途是在例子系统里绘制点粒子。(粒子系统将在第四章讲述。)顶点缓冲器里每个顶点是一个三维的坐标位置,还有颜色信息。此类型的图元数量会缓冲器里的顶点数量。
第二种图元,线段,用来在三维空间中两个点之间绘制一条单像素宽的线段。这可能是最少被使用的图元类型。它的唯一用途是绘制覆盖图中足智多谋的显示信息(Its only utility is to render “heads-up” display information as part of an overlay)。此图元实际上常常以两个类型出现:LineList和LineStrip。列表版本指明缓冲器中每两个顶点会被绘制成一条线段。要注意的是如果我们绘制线段列表,顶点缓冲器里的顶点数量必须是偶数。条带版本使用缓冲器里的顶点绘制一跳多段的线段。
剩下的图元类型在3D游戏中使用的最多。利用三角形之间的关系来绘制三角形。第一种也是最普通的事三角形列表。位于缓冲器里的每三个顶点,都会绘制成一个三角形。这种方法在三种三角形类型中只要最少次数的设置。如果物体的三角形邻接的绘制,我们可以利用这一条件,使邻接的三角形共享公共的顶点。
三角形带图元被使用在这种情况下:如果缓冲器中每个三角形的后两个顶点是后一个三角形的顶点。这比使用三角形列表方法提高了大概66%的性能,因为相比前种方法只需三分之一的顶点被转换成屏幕坐标。为了使用这种图元,我们必须照规则来建模物体,并且保证缓冲器里是正确填充的(packed)。三角形带大量被用在绘制一个矩形区域。图3-4 给出了三角形带动一个示例:
图 3-4:三角形带
最后一种图元是三角形扇。扇有带同样的优点,不过却有稍微不同的用途。在三角形扇里,缓冲器里第一个顶点与扇里所有的三角形共用。每个三角形的最后一个顶点与下一个三角形共用。图3-5 给出了三角形扇的一个示例:
图 3-5 三角形扇