0
如何將歸一化球體上的點(0.5的半徑,0,0,0的中心)映射爲魚眼紋理圖像?我正在使用C#語言和OpenGL。結果應該是圖像的UV座標。球體只是球體每個頂點的三維座標列表,因此每個球體都會得到一個UV座標到圖像中。將球體上的點映射到魚眼圖像上的像素位置
最終的結果將是一個完整的球體,當魚眼圖像紋理到球體上時,魚眼圖像一直環繞360度。
例魚眼圖像:
如何將歸一化球體上的點(0.5的半徑,0,0,0的中心)映射爲魚眼紋理圖像?我正在使用C#語言和OpenGL。結果應該是圖像的UV座標。球體只是球體每個頂點的三維座標列表,因此每個球體都會得到一個UV座標到圖像中。將球體上的點映射到魚眼圖像上的像素位置
最終的結果將是一個完整的球體,當魚眼圖像紋理到球體上時,魚眼圖像一直環繞360度。
例魚眼圖像:
沒有映射到球上的單個方法。帖子中的紋理看起來像接縫將在提名的世界飛機上。將它與一個典型的skydome類型紋理進行比較,其中球體通常在底部加入(相機不能看到連接)。 您可以使用着色器這樣的代碼基於UV點映射:
float2 AngleFromPoint(float3 pos)
{
float phi = atan(pos.y/pos.x);
float theta = atan(pos.y/pos.z/sin(phi));
return(float2(phi, theta));
}
哪個方向是向上以及其中:
float3 PointOnSphere(float phi, float theta, float radius)
{
float3 pos = float3(0, 0, 0);
pos.x = radius * cos(phi) * sin(theta);
pos.y = radius * sin(phi) * sin(theta);
pos.z = radius * cos(theta);
return pos;
}
或推翻從表面上的點得到UV縫連接是你必須自己鍛鍊的東西。如果紋理看起來壓縮,因爲它是非線性的,你可能需要嘗試類似:
texcoord = pow(texcoord, 0.5f);
編輯:顯然,規範的角度爲0 - 1紋理座標
我在AngleFromPoint插入,但得到一個非常扭曲的圖像。 AngleFromPoint的輸入只是球體上的一個頂點? – jjxtra
AngleFromPoint將返回弧度的角度。如果你只是設置輸出顏色,你可以確認座標:color = float4(phi,theta,0,1);它應該顯示紅色到綠色到黃色,而不是大片的黑色或黃色 – tim