openGL では、論文「Fast, Minimum Storage Ray/Triangle Intersection」( 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();
何らかの理由で、これは機能しません。私は私の光線を間違って形成していますか?それとも間違って変換しますか?