座標變換或空間變換,本質是相對座標的變化,絕對座標沒變。
世界空間有兩個物體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 ...