在三维计算机图形学中,多边形造型是用多边形表示或者近似表示物体曲面的物体造型方法。多边形造型非常适合于扫描线渲染,因此实时计算机图形处理中的一项可以使用的方法。
简介
其它表示三维物体的方法有
NURBS 曲面、细分曲面以及
光线跟踪中所用的基于方程的表示方法。
多边形造型所用的基本对象是三维空间中的
顶点。将两个
顶点连接起来的直线称为
边。三个
顶点经三条边连接起来成为
三角形,三角形是
欧几里德空间中最简单的多边形。多个
三角形可以组成更加复杂的多边形,或者生成多于三个
顶点的单个物体。四边形和
三角形是多边形造型中最常用的形状。通过共同的
顶点连接在一起的一组多边形通常当作一个元素。组成元素的每一个多边形就是一个表面。
在
欧几里得几何中,任何三点都可以确定一个平面。因此,
三角形总是位于一个平面,但是对于更加复杂的多边形来说可能并非如此。
三角形的平面特性使得
曲面法线的确定变得很简单,曲面法线是垂直于三角形所有边的一个三维矢量。
曲面法线对于
光线跟踪中确定光线传输非常有用,并且在流行的 Phong shading 模型中它也是一个关键成分。有一些
渲染系统使用
顶点法线取代
曲面法线来获得效果更好的光照系统,这样做的代价就是计算量的增加。注意每个
三角形都有两个方向相反的
曲面法线。在许多系统中,只有一个法线是有效的,根据需求可以定义成可见或者不可见;另外一条法线称为 背面。
许多造型程序并没有严格地遵守几何理论;例如,两个
顶点之间在同样的空间位置可以有两个截然不同的边。同样可能能在同样的空间坐标有两个
顶点或者同样的位置有两个表面。这样的状况并不是所期望的结果,因此许多
软件包都可以自动地清除它们。如果无法自动清楚,就必须进行手动清除。
通过共有的边连接在一起的一组多边形叫作一个网格。为了增加网格
渲染时效果的真实性,它必须是非自相交的,也就是说多边形内部没有边,另外一种说法就是网格不能穿过自身。并且网格不能出现任何的错误,如重复的
顶点、边或者表面。另外对于有些场合,网格必须是流形,即它不包含空洞或者奇点(网格两个不同部分之间通过的一个
顶点相连)。
网格的构建
尽管可以通过定义
顶点和表面手动构建网格,但是更加常用的方法是用工具来完成。有许多不同的三维图形
软件包可以用来构建多边形网格。
其中最流行的网格构建方法是盒状造型,它使用两个简单的工具:
(1)子分工具:通过添加新的
顶点将表面及边切分成更小的部分。例如,通过在正方形的中心以及每条边的中点分别添加一个
顶点,这样就分区成四个更小的正方形;
(2)拉伸工具:用于一个或者一组表面。它生成同样大小和形状的一个新的表面,并且与现有的通过一个表面连接起来。这样,在一个正方形表面上进行拉伸操作将生成一个与该表面连在一起的立方体;
第二种常见的造型方法有时也称为膨胀造型或者拉伸造型。在这种方法中,用户创建一个跟踪照片或者素描中物体轮廓的二维形状,然后,根据另外一张不同角度的照片将按照轮廓从二维形状拉伸到三维。这种方法在生成人脸与头部的场合中非常常见。通常,艺术家创作出头部的一半,然后相对于同一平面在相对的方向复制
顶点,最后将两部分连接到一起。这样就能保证得到一个对称的结果。
另外一种常用的
多边形网格生成方法是将不同的体元或者图元连接到一起,体元和图元是造型环境中预先定义的多边形网格。常用的体元与图元有:
(1)立方体;
(2)棱锥;
(3)圆柱;
(5)特殊的特定应用体元,如 Utah Teapot 或者 Suzanne、Blender 的猴子福神;
(6)球 - 通常球用下面的两种方法之一表示:二十面球和UV 球。二十面球是用二十面体表示球体;UV 球 由四边形组成,就像在一些地球仪上看到的那样——四边形在距离赤道较近的地方较大,在距离两极较近的地方较小,最后在两极缩成顶点;
最后,还有一些特殊的构建不同细节层次网格的方法。草图造型是一种界面友好的快速构建细节要求不高的模型的方法,
三维扫描仪可以用近乎自动地方式根据真实世界的物体生成细节层次丰富的网格。这些设备都非常昂贵,并且通常只有研究人员或者专业人员才使用,但是它们可以生成低于毫米精度的数字表示结果。
优缺点
用多边形表示物体有很多缺点。多边形没有办法精确地表示
曲面,因此为了实现较好的观察效果必须使用大量的多边形进行近似。复杂模型的使用带来处理速度的降低。在
扫描线渲染中,不管多边形的尺寸如何,每个多边形都要进行变换然后进行显示,而通常每个时刻屏幕上都会有大量的模型出现。为了减少需要
渲染的多边形数量,程序员经常需要使用不同的细节层次表示同一个物体。
这种方法的一个主要优点是它比其它的表示方法处理速度快。尽管一些先进的
图形卡能够以每秒 60 帧甚至更高的速度显示非常细致的场景,
光线跟踪这种显示非多边形模型的主要方法,如果实现同样的细节根本无法达到 10 帧每秒的交互
帧速。