最近,我寻求帮助 https://stackoverflow.com/q/18836484/1530508关于 OpenGL 中的 3D 相机旋转。这个答案 https://stackoverflow.com/a/18836618/1530508接下来的评论对我帮助很大,但仍然存在一个主要问题:移动相机时,运动通常(但并非总是)与应有的方向完全相反。例如,当相机的方向矩阵为恒等时,相机会完美移动。然而,如果它沿任何方向旋转,它在垂直于旋转轴的轴上的运动将具有与预期运动相反的符号。
话虽如此,我想我知道为什么会发生这种不一致的行为:
众所周知,OpenGL使用右手坐标系:
如果我正确地理解了这张图,当相机定位在同一位置时,z 轴应该指向相机,并且 z 值应该随着远离相机而减小(显然是肯定的)here https://stackoverflow.com/a/12336360/1530508)。 (在世界空间中测量的坐标)。
然而,在我的程序中,Z 轴远离相机,并且 z 值随着远离相机而增加。这是一个例子:
相机已向前移动,沿着本应是负 z 轴的方向,但实际上是正 z 轴。
如果我正确地将这种行为解释为异常,那么它将解释我的相机运动迹象的所有问题,因为当前看起来“正确”的运动实际上是错误的,并且我有一致的迹象表明我可以简单地反转以产生正确的运动。
所以问题是:
- 我的Z轴是向后的还是应该是这样的?
-
如果是倒退的话,为什么呢?从对该主题的多次讨论来看(1 https://stackoverflow.com/q/17650219/1530508, 2 https://stackoverflow.com/q/15337326/1530508, 3 https://stackoverflow.com/q/3430789/1530508),错误可能出现在我定义透视截头体的位置,所以我将其放在这里:
public static final int P_ZNEAR = 1, P_ZFAR = 500;
public static void perspective()
{
int i = GL11.glGetInteger(GL11.GL_MATRIX_MODE);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
double ymax, xmax;
ymax = P_ZNEAR * Math.tan(FOV / 2);
xmax = ymax * ASPECT_RATIO;
GL11.glFrustum(xmax, -xmax, -ymax, ymax, P_ZNEAR, P_ZFAR);
GL11.glMatrixMode(i);
}
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)