座標變換,空間變換的本質

2021-09-26 09:54:05 字數 1740 閱讀 9464

座標變換或空間變換,本質是相對座標的變化,絕對座標沒變。

世界空間有兩個物體a,b。將a變換到b的座標空間意思是:將a從世界空間變換到b的區域性座標空間,也就是在b的區域性座標系中重新表示a的座標(也就是求出a在b座標系中的相對座標)

做法很簡單:

1,a - b 得到乙個向量 v,

2,把v分解(投影)到b的區域性座標的各軸上,一般用單位向量的點乘實現,因為點乘表示投影,即  x = dot(v, x), y=dot(v, y), z=dot(v, z),x,y,z是b座標系的三個軸

得到的結果就是a在b的區域性座標系中的座標,物體a也就變換到了物體b的區域性座標系中,簡稱為a變換到了b的空間中。

在遊戲引擎開發中最常用的幾種變換:

例1,渲染管線中為了渲染物體,將物體變換到相機空間

例2,渲染陰影貼圖shadow map時,將相機變換到燈光空間

原理如此,由上可以推導出乙個變換矩陣,直接將1,2兩上步驟合為乙個矩陣,推導如下:

1,  a - b 得到向量v用矩陣表示就是 a乘以乙個平移矩陣m,其中m[3][0]=b.x, m[3][1]=b.y, m[3][2b.z,如下

a - b = a * m,其中m為:

m = 1   0  0  0

0   1  0  0

0   0  1  0

b.x    b.y    b.z  1

2,將向量 v 分解(投影)到 b的區域性座標系的各軸上(x, y, z三個軸座標基分別right, up, look向量)

x =  dot(v, right)

y =  dot(v, up)

z = dot(v, look)

那麼表示成向量與矩陣的乘法就是如下:

v *  right.x  up.x  look.x  0     = v * m1

right.y  up.y  look.y  0

right.z  up.z  look.z  0

0    0    0    1

將1,2兩步合起來:

a * m * m1 =  

a*     1   0  0  0  *   right.x  up.x  look.x  0    = a *   right.x    up.x    look.x       0   

0   1  0  0    right.y  up.y  look.y  0     right.y    up.y    look.y   0

0   0  1  0     right.z  up.z  look.z  0     right.z    up.z    look.z   0

b.x    b.y    b.z  1     0    0    0    1    dot(b, right)  dot(b, up)  dot(b, look) 1

= a * view

其中view也就是常說的檢視矩陣,由此可以看出,檢視矩陣不是相機變換的專利,而是所有物體都具有的一種旋轉加平移的變換。

這也就是u3d中 transform.lookat的原理,就是說每個物體都有乙個檢視變換矩陣,包括相機,燈光。這樣我們就明白了什麼是【變換到燈光空間】這個難以理解的概念

eigen座標變換 座標變換

位姿變換 位姿在不同座標系中變換,更常用 posest or t,關鍵在於同乙個位姿 實際位姿固定不變 但是在不同座標系有不同的 表 示!座標系變換 座標系本身變換 並且 coordst coordst t.inverse 注意 ros tf 發布的變換是座標系變換 coordst,包括通過 tf2...

座標系變換與座標變換理解

在slam中經常用到空間點的座標變換。假設已獲得相機某一位置的位姿pose,pose包括相機座標系相對於世界座標系的旋轉r和平移t,此時若已知某點p在相機座標系下的座標為pc,計算點p在世界座標系下的座標pw,可使用 pw r pc t t pc 開始的時候我有這樣的疑問 t表示世界座標到相機座標系...

基變換與座標變換

近來正在看 3d math primer for graphics and game development 3d數學基礎 圖形與遊戲開發 清華大學出版社,當看到第八章 矩陣與線性變換時,不禁產生疑問 當繞x軸旋轉時,求出旋轉後的基向量矩陣rx 1 0 0 rx p q r 0 cos sin 0 ...