有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么gluProject不使用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();

照相机。看()

void look() {
    calcPoints(xAng, yAng);
    gluLookAt(x, y, z, x + dx, y + dy, z + dz, 0, 1, 0);
}

参与项目:

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) 个答案

  1. # 1 楼答案

    也许可以试着让上方向向量与相机方向和位置成直角,而不是(0,1,0)不断变化