齊次座標中的w

2021-04-21 22:06:01 字數 1467 閱讀 2608

曾經接到過乙個重量級的遊戲公司的**面試,問我遊戲中經常出現變換方程式中的座標除了x,y,z還有乙個w,是什麼含意?一時語塞。對方友善的岔開了這個話題。最近正好看一本書,專講3d數學基礎問題的,大概弄明白了這個w的來龍去脈,胡亂寫幾筆留著以後複習,但願不會誤人子弟。

2d線性變換只需要2x2矩陣,看下面的乘式:

(不會嵌入矩陣,只好分開來寫,看的時候自己在紙上畫吧)

v(x y)是2d座標

m(2x2)是2x2矩陣,元素一次為m11,m12,m21,m22

v*m = (x*m11+y*m12   x*m12+y*m22)

如果需要加上位移變換,需要用3x3矩陣,同時令矩陣第三行為偏移量,

令m(3x3)是3x2矩陣,除上面的四個元素,增加一行元素m31,m32

其中前四個元素組成的2x2矩陣為2d線性變換矩陣,增加了一行(m31, m32),m31和m32分別為x和y的位移,如果只簡單增加一行到原來的2x2矩陣,矩陣變成3x2,2d向量v(x,y)是1x2的,乘法沒辦法做了,所以將2d向量中增加乙個分量擴充套件成3d分量v(x, y, w)。於是有

v*m = (x*m11+y*m21+w*?     x*m12+y*m22+w*?     x*m13+y*m23+w*?)

其中問號是因為只增加了一行,矩陣m沒有第三列,所以為矩陣增加第三列元素m31,m32,m33,以完成上面的程式

座標v(x y w)

矩陣m= }

v*m = (x*m11+y*m21+w*m31    x*m12+y*m22+w*m32     x*m13+y*m23+w*m33)

這個w該取多少呢?參考上面的乘式右邊的結果,要使線性變換的結果的x分量和y分量分別偏移m31和m32,只有令w=1。

而矩陣被擴充為3x3以保持向量維持在三個分量以繼續應用仿射變換。

v*m = (x*m11+y*m21+1*m31    x*m12+y*m22+1*m32   0+0+1*m33)

= (x*m11+y*m21+m31    x*m12+y*m22+m32   m33)

為了讓結果依然保持v(x y w),其中w=1的形式,只有令m33=1

所以最後得到的座標是v(x y 1)

最後得到的矩陣是m }

從幾何意義上來說,就是把2d點限制在z=1的平面中,對於3d點(x, y, z)且z!=w,投影到z=1的平面,就是(x/w, y/w, 1).如果w=0,幾何上認為在無窮遠處的點,從上面的公式可以得到沒有位移的線性變換的結果,所以可以認為是對向量的變換,沒有大小,只有方向。

以此類推到3d座標系的4d齊次座標,可以帶來如下用途:

增加平移功能的變換矩陣,並通過w控制平移開關以區分位置和方向

類似於上面說的投影的概念,改變4x4矩陣第三列的分量可以得到投影矩陣

上面只是數學上的推導,實際的幾何圖形管道如何實現,我並不得知。回到剛開始提到的面試,不知道這樣回答是否能過關並要到乙個比較高的薪水,呵呵,不過估計有了上次的經歷,我已經進入了對方的招聘黑名單了。

齊次座標的理解

一直對齊次座標這個概念的理解不夠徹底,只見大部分的書中說道 齊次座標在仿射變換中非常的方便 然後就沒有了後文,今天在乙個叫做 三百年 重生 的部落格上看到一篇關於透視投影變換的 的文章,其中有對齊次座標有非常精闢的說明,特別是針對這樣一句話進行了有力的證明 齊次座標表示是計算機圖形學的重要手段之一,...

齊次座標的理解

一直對齊次座標這個概念的理解不夠徹底,只見大部分的書中說道 齊次座標在仿射變換中非常的方便 然後就沒有了後文,今天在乙個叫做 三百年 重生 的部落格上看到一篇關於透視投影變換的 的文章,其中有對齊次座標有非常精闢的說明,特別是針對這樣一句話進行了有力的證明 齊次座標表示是計算機圖形學的重要手段之一,...

齊次座標的理解

在乙個叫做 三百年 重生 的部落格上看到一篇關於透視投影變換的 的文章,其中有對齊次座標有非常精闢的說明,特別是針對這樣一句話進行了有力的證明 齊次座標表示是計算機圖形學的重要手段之一,它既能夠用來明確區分向量和點,同時也更易用於進行 仿射 線性 幾何變換。f.s.hill,jr。下面是作者對齊次座...