학교 프로젝트를 위해 구형 텍스처 맵을위한 쎄타와 파이를 찾아야합니다. 텍스쳐링을위한 실제 OpenGL은 이미 완료되었습니다 (초보자 코드 포함). 시작 코드는 아래의 기능과 주석을 제공합니다. 코드는 내가 (주어진 x와 z를위한 초기화, 외에) 지금까지 무엇을했는지이다 코멘트에서 "지침"에 따라 구형 텍스처 매핑을위한 쎄타와 파이 찾기
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