球面點三維座標到紋理二維座標的轉換

2022-06-17 22:30:17 字數 1257 閱讀 8179

把全景影象貼在乙個固定半徑的三維球體上,這樣該視點空間就建立起來了。這裡的固定半徑對應固

定的焦距。

三維球體的半徑為r,水平轉動角度為h([0,2pi]),上下轉動角度為p([-pi/2,pi/2]),所以球面上一

點的三維座標sphere(x,y,z)=(r*cosp*cosh,r*cosp*sinh,r*sinp)。

反向變換有p=arcsin(z/r) ,h=arctan(y/x)。

當把p對應到紋理的v方向,把h對應到紋理的u方向,uv的範圍都是[0,1]。在知道球面座標x、y,z和半

徑r以後,球面點對應的紋理座標就是v=arcsin(z/r)/pi+0.5,u=arctan(y/x)/2/pi。

**:經緯度座標和xyz笛卡爾座標的轉換常常應用在有關全景圖的研究方面,在看了幾篇提案和**後才理解了座標的轉換方法

通過一張圖來說明

按照我們直觀的理解,會認為φ角是藍色實線和y軸的夾角,θ角是xoz平面的藍色虛線和z軸的夾角。但實時上並不是這樣。

我們先假設p=(φ,θ)對應為地理座標中的經度和緯度,那麼當p點位於球的頂端時,其緯度為90°;當p點位於球的赤道上時,其緯度應該為0°,也就是說,y軸其實是對應φ為90°的時候。(具體參照有圖可更好的理解)

按照上面的結論,我們就可以寫出下面的對應關係

與第乙個圖的座標對應相同。至此我們就完成了經緯度座標到xyz座標的轉化。

**:自己的理解:

如果一張圖的解析度是200x100,那麼中任意畫素,對應到球形直角座標系的座標是多少呢?

假設該任意畫素位置為(u,v),很明顯u的取值範圍為[0,200],v的取值範圍為[0,100]

有上面文章的鋪墊 φ角的取值範圍是[-π/2,π/2],θ角的取值範圍是[-π,π]

則任意畫素位置(u,v)對應的φ角和θ角為

θ=[(u*2π)÷200]-π

φ=[(v*π)÷100]-π/2

代入到公式

得到三維座標系的座標(x,y,z)

x=cos(φ)sin(θ)

y=sin(φ)

z=cos(φ)cos(θ)

三維座標轉換為二維座標

最近做專案用到三維座標轉換為二維平面座標的轉換公式。看了網上的很多資料,都不太適用自己的專案。最後決定自己來推導。如下圖所示,將二維平面上的三維座標系o x y z 轉換為二維座標系o xy。利用推導出的公式,在二維平面上繪製出三維立體圖。假設在三維座標系中有一點a x y z 轉換為二維座標系中的...

OpenGL 三維到二維,座標系統

現實中的三維物體要畫到紙上,二維平面畫圖,就是點和線,三維是點線面,需要把三維的每個位置的空間座標 x,y,z 對映到二維平面座標 x,y 這可以通過線性代數知識解決。opengl通過各種變換實現,都是矩陣運算實現的 幾種變換簡介 參見opengl超級寶典第5章 變換用途 檢視指定觀察點的位置 模型...

OpenGL 螢幕座標到物體三維座標的轉換

直接看 吧,有注釋。入參 int x,int y 表示螢幕的座標 glint viewport 4 gldouble modelview 16 gldouble projection 16 glfloat winx 0.0f glfloat winy 0.0f glfloat winz 0.0f g...