因此,我正在使用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));

最佳答案

也许尝试使up矢量与摄像机的方向和位置成直角,而不是始终保持(0,1,0)。

10-05 21:22