3D游戏从入门到精通-4
3D空间里的物体都是实体的,主要由平面组成。比如正方体,就有6个平面。在D3D里组成三维物体的基本平面是三角形,无论是多么复杂的物体,都是有三角形组成的。并且D3D里支持显示最小的图形也是三角形,它是没有点和直线显示的。因此,要显示正方体,就需要把每个平面分成两个三角形,才能显示。如下图所示:
为什么选择三角形作为D3D里最小的平面呢?由于三个点组成的平面,肯定是共面的,是平坦的,并且显示效率是最高的。如果选择其它多边形的话,就存在点不共面的情况,这样变得非常复杂,所以目前显示卡也是针对三角形进行优化显示的。
要在D3D里显示物体,就是显示很多的三角形,让这些三角形连接起来,就组成游戏里的人体,动物,武器等等。在几何里就知道每个三角形都有三个顶点组成,那么只要设置了三个顶点的值,就可以在D3D里显示三角形出来了。用D3D里的向量表示三个顶点就是:
A: D3DXVECTOR3( -1.0f, -1.0f, 0.0f );
B: D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
C: D3DXVECTOR3( 1.0f, -1.0f, 0.0f );
只要把所有三角形的顶点,都按上面格式设置到顶点缓冲区里,就可以显示一个三角形出来。但这个三角形又可分为两个表面:前表面和后表面。在D3D缺省情况下,只会显示前表面。那么怎么样来区别前表面和后表面呢?由于D3D是采用左手坐标系,正对着平面看去是顺时针方向的顶点顺序就是前表面。如下图所示:
如果不小心把顶点的顺序搞反,就会看不到表面显示。并且还会关系到后面的灯光显示,纹理显示。
其实,前表面就是平面的法向量指向的表面。
只要认识到组成平面的顶点以及顶点排列顺序,就可以用平面构成三维物体了。不管多么复杂的物体,都可以由顶点组成平面,再有平面组成物体。不管是圆的物体,还是方的物体,都可以使用三角形去组成。其实这种三维物体是数字化的,永远都是尽可能逼近,不可能是完全相同的。比如要显示一个足球,它是圆的,需要非常多的三角形去构成它,但不可能完全一样的。并且使用过多的三角形,就会导致CPU或者GPU处理不过来。在目前的个人电脑里,虽然处理三角形的速度快了很多,但真的要显示大量三角形,还是不行的。