0
我需要爲球形紋理映射找到theta和phi。許多實際的紋理OpenGL已經完成(附帶入門代碼)。起始代碼提供下面的功能和註釋。該代碼是我迄今所做的(除了初始化x和z,它被賦予):尋找球形紋理映射的θ和phi
Vec3f sphere::getTextureCoords(Vec3f eye, Vec3f dir)
{
// find the normal (getNormal)
Vec3f n = this->getNormal(eye, dir);
// use these to find spherical coordinates
Vec3f x(1, 0, 0);
Vec3f z(0, 0, 1);
// phi is the angle down from z
// theta is the angle from x curving toward y
// find phi using the normal and z
float phi = acos(n.Dot3(z));
// find the x-y projection of the normal
Vec3f proj(n.x(), n.y(), 0);
// find theta using the x-y projection and x
float theta = acos(proj.Dot3(x));
// if x-y projection is in quadrant 3 or 4, then theta = 2PI - theta
if (proj.y() < 0)
theta = TWOPI - theta;
Vec3f coords;
coords.set(theta/TWOPI, phi/PI, 0);
return coords;
}
繼註釋的「指令」,這是我想出了。紋理貼圖不起作用(沒有錯誤,座標錯誤)。有可能getNormal
函數工作不正常,但我認爲問題在於我對球座標缺乏瞭解。請讓我知道你認爲是什麼問題,謝謝!
請注意維基百科有關[球面笛卡爾轉換](http://en.wikipedia.org/wiki/Spherical_coordinate_system#Cartesian_coordinates)文章中的公式,特別是它們使用arctan和關於[atan2]的註釋(http: //en.wikipedia.org/wiki/Atan2)。 – outis