多边形造型

在 3D 電腦圖形學中，**多邊形造型**是用多邊形表示或者近似表示物體曲面的物體造型方法。多邊形造型非常適合於掃描線彩現，因此即時電腦圖形處理中的一項可以使用的方法。其它表示三維物體的方法有 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 所用

## 參見

* 有限元分析 / 有限元方法
* 多邊形網格
* 向量圖形

## 參考文獻

1. OpenGL SuperBible (3rd ed.), by Richard S Wright and Benjamin Lipchak ISBN 0-672-32601-9
2. OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 1.4, Fourth Edition by OpenGL Architecture Review Board ISBN 0-321-17348-1
3. 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
4. Blender documentation: https://web.archive.org/web/20051212074804/http://blender.org/cms/Documentation.628.0.html
5. Maya documentation: packaged with Alias Maya, http://www.alias.com/eng/index.shtml （頁面存檔備份，存於網際網路檔案館）