多边形造型
在三维计算机图形学中,多边形造型是用多边形表示或者近似表示物体曲面的物体造型方法。多边形造型非常适合于扫描线渲染,因此实时计算机图形处理中的一项可以使用的方法。其它表示三维物体的方法有 NURBS 曲面、细分曲面以及光线跟踪中所用的基于方程的表示方法。
网格造型所用的基本对象是三维空间中的顶点。将两个顶点连接起来的直线称为边。三个顶点经三条边连接起来成为三角形,三角形是欧几里得空间空间中最简单的多边形。多个三角形可以组成更加复杂的多边形,或者生成多于三个顶点的单个物体。四边形和三角形是多边形造型中最常用的形状。通过共同的顶点连接在一起的一组多边形通常当作一个元素。组成元素的每一个多边形就是一个表面。
在欧几里得几何中,任何三点都可以确定一个平面。因此,三角形总是位于一个平面,但是对于更加复杂的多边形来说可能并非如此。三角形的平面特性使得曲面法线的确定变得很简单,曲面法线是垂直于三角形所有边的一个三维向量。曲面法线对于光线跟踪中确定光线传输非常有用,并且在流行的Phong着色法模型中它也是一个关键成分。有一些渲染系统使用顶点法向量取代曲面法线来获得效果更好的光照系统,这样做的代价就是计算量的增加。注意每个三角形都有两个方向相反的曲面法线。在许多系统中,只有一个法线是有效的,根据需求可以定义成可见或者不可见;另外一条法线称为 背面。
许多造型程序并没有严格地遵守几何理论;例如,两个顶点之间在同样的空间位置可以有两个截然不同的边。同样可能能在同样的空间坐标有两个顶点或者同样的位置有两个表面。这样的状况并不是所期望的结果,因此许多软件包都可以自动地清除它们。如果无法自动清楚,就必须进行手动清除。
通过共有的边连接在一起的一组多边形叫作一个网格。为了增加网格渲染时效果的真实性,它必须是非自相交的,也就是说多边形内部没有边,另外一种说法就是网格不能穿过自身。并且网格不能出现任何的错误,如重复的顶点、边或者表面。另外对于有些场合,网格必须是流形,即它不包含空洞或者奇点(网格两个不同部分之间通过唯一的一个顶点相连)。
多边形网格的构建
尽管可以通过定义顶点和表面手动构建网格,但是更加常用的方法是用工具来完成。有许多不同的三维图形软件包可以用来构建多边形网格。
其中最流行的网格构建方法是盒状造型,它使用两个简单的工具:
- 子分工具通过添加新的顶点将表面及边切分成更小的部分。例如,通过在正方形的中心以及每条边的中点分别添加一个顶点,这样就分割成四个更小的正方形。
- 拉伸工具用于一个或者一组表面。它生成同样大小和形状的一个新的表面,并且与现有的通过一个表面连接起来。这样,在一个正方形表面上进行拉伸操作将生成一个与该表面连在一起的立方体。
第二种常见的造型方法有时也称为膨胀造型或者拉伸造型。在这种方法中,用户创建一个跟踪照片或者素描中物体轮廓的二维形状,然后,根据另外一张不同角度的照片将按照轮廓从二维形状拉伸到三维。这种方法在生成人脸与头部的场合中非常常见。通常,艺术家创作出头部的一半,然后相对于同一平面在相对的方向复制顶点,最后将两部分连接到一起。这样就能保证得到一个对称的结果。
另外一种常用的多边形网格生成方法是将不同的体元或者图元连接到一起,体元和图元是造型环境中预先定义的多边形网格。常用的体元与图元有:
- 立方体
- 棱锥
- 圆柱
- 二维图元,如正方形、三角形、圆形
- 特殊的特定应用体元,如 Utah Teapot 或者 Suzanne、Blender 的猴子福神
- 球 - 通常球用下面的两种方法之一表示:
- 二十面球是用二十面体表示球体
- UV 球 由四边形组成,就像在一些地球仪上看到的那样——四边形在距离赤道较近的地方较大,在距离两极较近的地方较小,最后在两极缩成顶点。
最后,还有一些特殊的构建不同细节层次网格的方法。草图造型是一种界面友好的快速构建细节要求不高的模型的方法,三维扫描仪可以用近乎自动地方式根据真实世界的物体生成细节层次丰富的网格。这些设备都非常昂贵,并且通常只有研究人员或者专业人员才使用,但是它们可以生成低于毫米精度的数字表示结果。
其它
在多边形网格构建完成之后,在用于游戏、动画等之前还必须进行一些必要的处理步骤。必须经过纹理映射将色彩与纹理映射到模型上,并且为了实现动画还要加入逆运动学骨架。在物理仿真的应用中还必须在网格中加入重量、重心等信息。
为了在造型环境之外也能在计算机屏幕上显示模型,需要将模型保存为下面所列的文件格式,然后使用能够处理那种文件格式的程序进行显示。显示三维多边形模型的两种主要方法是 OpenGL 与 Direct3D,这两个方法都可以在没有图形卡的场合中使用。
优缺点
用多边形表示物体有很多缺点。多边形没有办法精确地表示曲面,因此为了实现较好的观察效果必须使用大量的多边形进行近似。复杂模型的使用带来处理速度的降低。在扫描线渲染中,不管多边形的尺寸如何,每个多边形都要进行变换然后进行显示,而通常每个时刻屏幕上都会有大量的模型出现。为了减少需要渲染的多边形数量,程序员经常需要使用不同的细节层次表示同一个物体。
这种方法的一个主要优点是它比其它的表示方法处理速度快。尽管一些先进的图形卡能够以每秒 60 帧甚至更高的速度显示非常细致的场景,光线跟踪这种显示非多边形模型的主要方法,如果实现同样的细节根本无法达到 10 帧每秒的交互帧速。
文件格式
有许多保存三维多边形数据的格式,其中最流行的有:
- .3ds, .max, 3D Studio Max 使用
- .mb and .ma, Maya 使用
- .lwo, Lightwave 3D 使用
- .obj (Wavefront 的 "The Adanced Visualizer")
- .C4d,Cinema 4D 所用
- .dxf, .dwg, .dwf, AutoCAD 所用
- .md3, .md2, Quake 系列游戏所用
- .fbx (Alias)
- .rwx (Renderware)
- .wrl (VRML 2.0)
- .blend , blender 3d 所用
参见
参考文献
- OpenGL SuperBible (3rd ed.), by Richard S Wright and Benjamin Lipchak ISBN 0-672-32601-9
- OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 1.4, Fourth Edition by OpenGL Architecture Review Board ISBN 0-321-17348-1
- OpenGL(R) Reference Manual : The Official Reference Document to OpenGL, Version 1.4 (4th Edition) by OpenGL Architecture Review Board ISBN 0-321-17383-X
- Blender documentation: https://web.archive.org/web/20051212074804/http://blender.org/cms/Documentation.628.0.html
- Maya documentation: packaged with Alias Maya, http://www.alias.com/eng/index.shtml (页面存档备份,存于互联网档案馆)