■ 3D Math Basis
摘要: 我們將討論渲染一幅帶有基本光照的單個圖像的大體過程,這里不考慮動畫和全局光照,如陰影和輻射度。
此外,注意這里只從概念上講解通過圖形管道的數據流,其順序并不是固定的。實踐中,我們也許會為了性能的優化而并行或亂序執行一些任務。比如,考慮到不同的渲染API,我們可能首先變換和照明所有頂點,然后才進一步的處理(進行裁剪和剔除),或者會并行處理二者,也可能在背面剔除之后再進行光照會得到更高效率。
閱讀全文
摘要: 最簡單的情形,多邊形網格不過是一個多邊形列表;三角網格就是全部由三角形組成的多邊形網格。多邊形和三角網格在圖形學和建模中廣泛使用,用來模擬復雜物體的表面,如建筑、車輛、人體,當然還有茶壺等。
當然,任意多邊形網格都能轉換成三角網格,三角網格以其簡單性而吸引人,相對于一般多邊形網格,許多操作對三角網格更容易。
閱讀全文
摘要: 考慮2D中的直線L,L由所有滿足p . n = d的點p組成。
其中n是單位向量,我們的目標是對任意點q,找出直線L上距q距離最短的點q',它是q投影到L上的結果。讓我們畫一條經過q平行于L的輔助線 M,如圖13.1所示。設nM和dM分別為直線方程的法向量和d值。因為L和M平行,所以它們的法向量相等:nM=n。又因為q在M上,所以dM為 q.n。
閱讀全文
摘要: 通過定義一個布爾函數f(x, y , z),我們能夠隱式表示一個圖元。如果所指定的點在這個圖元上,這個布爾函數就為真;對于其他的點,這個布爾函數為假。例如等式:
x2+y2+z2 = 1
對中心在原點的單位球表面上的所有點為真,隱式表示法用于測試圖元是否包含某點時非常有用。
閱讀全文
摘要: 處理變換是一件非常令人頭疼的事,矩陣更是棘手。如果你曾經編寫過關于矩陣的代碼并且沒有用設計良好的類,你會發現經常要處理負號、轉置矩陣或翻轉連接順序以使其能正常工作。
下面這幾個類正是為了消除在編程中經常遇到的這類問題而設計的。例如,很少需要直接訪問矩陣或四元數中的元素,因此特意限制了可用操作的數目以避免產生迷惑,再如,對cRotationMatrix類,沒有求逆和連接操作,因為如果按其本身的目的使用cRotationMatrix,這些操作是不應該出現或沒有意義的。
閱讀全文
摘要: 直觀地說,我們知道物體的“方位”主要描述的是物體的朝向。然而“方向”和“方位”并不完全一樣。向量有“方向”但沒有“方位”,區別在于,當一個向量指向特定方向時,可以讓向量自轉(如圖10.1所示),但向量(或者說它的方向)卻不會有任何變化,因為向量的屬性只有“大小”,而沒有“厚度”和“寬度”。
閱讀全文
摘要: 在任意方陣中都存在一個標量,稱作該方陣的行列式。
方陣M的行列式記作|M|或“det M”,非方陣矩陣的行列式是未定義的。n x n階矩陣的行列式定義非常復雜,讓我們先從2 x 2,3 x 3矩陣開始。
閱讀全文
摘要: 包含平移的線性變換稱作仿射變換,3D中的仿射變換不能用 3 x 3 矩陣表達,必須使用4 x 4矩陣。
一般來說,變換物體相當于以相反的量變換描述這個物體的坐標系。當有多個變換時,則需要以相反的順序變換相反的量。例如,將物體順時針旋轉20度,擴大200%,等價于將坐標系縮小200%,再逆時針旋轉20度。
閱讀全文
摘要: 一般來說,方陣能描述任意線性變換。線性變換保留了直線和平行線,但原點沒有移動。線性變換保留直線的同時,其他的幾何性質如長度、角度、面積和體積可能被變換改變了。從非技術意義上說,線性變換可能“拉伸”坐標系,但不會“彎曲”或“卷折”坐標系。
閱讀全文
摘要: 矩陣的維度被定義為它包含了多少行多少列,一個 r x c 矩陣有r行c列。用黑體大寫字母表示矩陣,如:M、A、R。需要引用矩陣的分量時,采用下標法,常使用對應的斜體小寫字母,如下面的3 x 3矩陣所示:
閱讀全文
摘要: 提供以下基本操作:
1. 存取向量的各分量(x, y , z)
2. 向量間的賦值操作
3. 比較兩向量是否相同
4. 將向量置為零向量
5. 向量求負
6. 求向量的模
7. 向量與標量的乘除法
8. 向量標準化
9. 向量加減法
10. 計算兩點(點用向量表示)間距離
11. 向量點乘
12. 向量叉乘
該向量的操作運算對3D點同樣適合。
閱讀全文
摘要: 向量的點積:
假設向量u(ux, uy)和v(vx, vy),u和v之間的夾角為α,從三角形的邊角關系等式出發,可作出如下簡單推導:
|u - v| * |u - v| = |u| * |u| + |v| * |v| - 2 * |u| * |v| * cosα
閱讀全文