そこで、gluProject を使用して 3D 座標を取得し、レンダリングされた画面上の場所を教えてくれます。問題は、gluProject で同じ座標が得られず、実際にレンダリングされた場所が得られないことです。奇妙な部分は、カメラの x、y、z とテストしているポイントの差が等しい場合 (たとえば、カメラが 5,3,4 でポイントが 2,0,1 の場合)、正しい値が得られることです。値。カメラの変換に gluLookAt() を使用しています。レンダリングに使用するのと同じ行列が gluProject に渡されていることを確認しました。以下は、私のレンダリング コード、camera.look()、および gluProject を使用した私の部分です。
レンダリング:
glEnable(GL_LIGHTING);
glEnable(GL_NORMAL_ARRAY);
glViewport(0, 0, Display.getHeight(), Display.getHeight());
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.0f, 1, .1f, 1000f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
cam.look();
for (Cube cube : cubes) {
cube.draw();
}
grid.draw();
Camera.look():
void look() {
calcPoints(xAng, yAng);
gluLookAt(x, y, z, x + dx, y + dy, z + dz, 0, 1, 0);
}
gluProject の部分:
glViewport(0, 0, Display.getHeight(), Display.getHeight());
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.0f, 1, .1f, 1000f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
cam.look();
modelview = BufferUtils.createFloatBuffer(16); //floatbuffers, defined earlier
projection = BufferUtils.createFloatBuffer(16);
viewport = BufferUtils.createIntBuffer(16);
FloatBuffer result = BufferUtils.createFloatBuffer(3);
glGetFloat(GL_MODELVIEW_MATRIX, modelview);
glGetFloat(GL_PROJECTION_MATRIX, projection);
glGetInteger(GL_VIEWPORT, viewport);
gluProject(1f, 0f, 0f, modelview, projection, viewport, result);
//Utils.printFloatBuffer(projection);
//Utils.printFloatBuffer(modelview);
System.out.println(result.get(0) + " " + result.get(1) + " " + result.get(2));