游戏中最常见的三维模型 (3D Model) 是由三角形 (Triangle, 用来描绘几何形状) 构成的. 除了物体的几何形状, 三维模型通常还需要保存其它多种信息. 例如材料信息 (Material),纹理坐标 (Texture Coordinate). 对骨骼动画 (Skeletal Animation) 模型来说, 我们还需要保存模型的骨骼结构层次. 一开始就介绍所有这些信息可能会使得初学者难以理解. 我会用一个系列文章由浅入深地介绍游戏中常见的三维模型的格式. 这里就是系列文章的第一篇--简单的三维模型. 游戏中的三维模型主要是由三角形构成的. 以一个立方体为例: 从视觉上, 它由六个面围成. 每个面最少可以由两个三角形构成. 这样, 我们最少可以通过12个三角形描绘出一个立方体的形状. 点 (Point) 是描述三角形的基本方式 (点是构成三维模型的一个基本要素. 具体见"游戏中的基本数学概念--矢量与点"). 在数学中我们通常用三个点来定义三角形的三个顶点(Vertex). 还是以立方体为例. 它由8个点来描述立方体的8个顶点, 它们的序号 (Index) 从0到7. 构成立方体的12个三角形可由这8个顶点的序号来描述. 图一中的三角形T1由<0,1,2> 描述. 这说明, T1的三个顶点是点0, 1, 2. 这种采用序号的描述方式大量地应用在游戏中 (特别是图形模块中). 一方面, 这种方法能节省内存, 另一方面, 它能加快处理速度. 下面我给出图一中立方体的具体描述 (假设立方体的边长为1.0): 那么点1的x,y,z坐标可表示为{0.0, 1.0, 1.0} //由此类推,所有8个点的几何信息可表示为: {1.0, 1.0, 1.0}, {0.0, 1.0, 1.0}, {0.0, 0.0, 1.0}, {1.0, 0.0, 1.0}, {1.0, 1.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 0.0}, {1.0, 0.0, 0.0} //而由上述三角型T1的表达方式,我们也可以得到所有12个三角形的序号表达形式为: {0, 1, 2}, {0, 2, 3}, {0, 4, 5}, {0, 5, 1}, {1, 5, 6}, {1, 6, 2}, {2, 6, 7}, {2, 7, 3}, {3, 7, 4}, {3, 4, 0}, {4, 7, 6}, {4, 6, 5} 下面我们来看一个简单的例子: 当我们需要知道该立方体中第三个三角形的信息时, 先查找序号信息. 我们可得到这个三角形三个顶点的序号 {0, 4, 5}. 再利用这三个序号分别查找顶点信息, 我们就得到了这个三角形的三个顶点的位置: {1.0, 1.0, 1.0}, {1.0, 1.0, 0.0}, {0.0, 1.0, 0.0}. 这样一个三角形的几何位置就确定下来了. 需要指出的是, 这种方法虽然简单, 却非常有用, 它能被用来描述任意复杂的物体. 图二是DirectX 提供的一个人物模型.图三显示了这个人物模型的三角形组成. 从表示方式上来说, 它与前面提到的立方体没有什么不同. 只是它的三角形更多更小, 所以可以描述更细微的信息. 实际上, 大部分的游戏都会用类似的方法来保存和描述三维物体的几何形状. |