だから私はチュートリアル(およびこのサイトの質問)を調べてきましたが、私の問題を解決するものは何も見つかりませんでした. 実装しようとしている現在のコードは次のとおりです。
private void pick() {
float[] matModelView = new float[16], matProjView = new float[16];
int[] view = new int[16];
float mouseX = width / 2;
float mouseY = height / 2;
Vector3f start = new Vector3f();
Vector3f end = new Vector3f();
FloatBuffer modelBuffer = compileBuffer(matModelView);
FloatBuffer projBuffer = compileBuffer(matProjView);
FloatBuffer startBuffer = compileBuffer(new float[]{start.x, start.y, start.z, 1});
FloatBuffer endBuffer = compileBuffer(new float[]{end.x, end.y, end.z, 1});
IntBuffer viewBuffer = compileBuffer(view);
glGetFloat(GL_MODELVIEW_MATRIX, modelBuffer);
glGetFloat(GL_PROJECTION_MATRIX, projBuffer);
glGetInteger(GL_VIEWPORT, viewBuffer);
gluUnProject(mouseX, mouseY, 0.0f, modelBuffer, projBuffer, viewBuffer, startBuffer);
gluUnProject(mouseX, mouseX, 1.0f, modelBuffer, projBuffer, viewBuffer, endBuffer);
start = new Vector3f(startBuffer.get(0), startBuffer.get(1), startBuffer.get(2));
end = new Vector3f(endBuffer.get(0), endBuffer.get(1), endBuffer.get(2));
picks.add(new Vector3f[]{start, end});
System.out.println("Mouse Coords: " + mouseX + ", " + mouseY);
System.out.println("Position: " + position.x + ", " + position.y + ", " + position.z);
System.out.println("Rotation: " + rotation.x + ", " + rotation.y + ", " + rotation.z);
System.out.println("Near Plane: " + start.x + ", " + start.y + ", " + start.z);
System.out.println("Far Plane: " + end.x + ", " + end.y + ", " + end.z);
}
マウスがつかまれているので、mouseX と Y を自分のやり方で設定しました。ここに画像といくつかの出力があります。(私は問題を本当に説明することはできません)
Mouse Coords: 400.0, 350.0
位置: 0.0、0.0、0.0 回転: 0.0、0.0、0.0 ニア プレーン: 0.0、0.0、-0.1 ファー プレーン: 0.0、4.2315264、-99.99771
したがって、X:0 Y:0 Z:0 の回転の場合、Y 座標の予期される出力は入力と同じになるはずです。高いです。これがその出力の写真です。
なぜこれが起こるのかについて、誰かが何らかのヒントや説明を教えてくれますか?
EDIT:激しくFacepalms:2番目のgluUnProjectのYパラメータでmouseXを押していました