为什么gluProject没有给出与LWJGL正确的屏幕空间坐标

时间:2013-03-06 22:54:43

标签: java opengl 3d lwjgl

所以我使用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));

1 个答案:

答案 0 :(得分:0)

也许尝试将向上矢量与摄像机方向和位置成直角而不是(0,1,0)。