在 openGL 中,我有一个 3D 模型,我正在使用论文“快速、最小存储射线/三角形交点”(http://jgt.akpeters.com/papers/MollerTrumbore97 )中解释的代码执行射线-三角形交点/)。
使用以下代码,我的光标位置未投影到世界空间中:
bool SCamera::unproject(Vector3 input, Vector3 & output){
GLint viewport[4];
glGetIntegerv(GL_VIEWPORT,viewport); //Grab screen info
float x = input.mX;
float y = input.mY;
float z = input.mZ;
Matrix4 P, Mv, res;
P = getProjection();
Mv = getCameraTransform();
Vector3 N; //Cursor point translated to having 0,0 at screen center
N.mX = ((x-viewport[0]) / viewport[2])*2 - 1;
N.mY = ((y-viewport[1]) / viewport[3])*2 - 1;
N.mZ = z*2-1;
res = P * Mv; //Multiply P * Mv to get transform
Vector3 w = res.inverse() * N; //Apply transform to N.
output.mX = w[0];
output.mY = w[1];
output.mZ = w[2];
return true;
}
之后,我通过执行以下操作形成一条射线:
unproject(Vector3(xClick, yClick,0),resultUnproject)
ray.origin = cameraPosition;
ray.direction = resultUnproject - ray.origin;
ray.direction.normalize();
现在,最后我试图通过三角形代码(上面链接)运行这条射线,但我似乎无法正确转换它。我目前的尝试如下:
Matrix4 mview, T;
mview = getModelview();
T = mview.inverse();
ray.origin = T*ray.origin;
ray.direction = T*ray.direction;
ray.direction.normalize();
出于某种原因,这不起作用。我的光线形成错误了吗?还是改错了?