gluLookAt第一人称视角

时间:2012-12-08 20:56:53

标签: java opengl lwjgl

我正在尝试将我的太空入侵者游戏切换到第一人称视角,即从船上看世界。关于我应该关注什么,我感到有些困惑。我目前在gluLookAt中使用这些参数:

GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
GLU.gluLookAt(ship3dPos.x, ship3dPos.y, ship3dPos.z,400.0f, 600.0f,-50.0f, 0.0f, 1.0f,-0.0f);

我不确定我应该将参数4,5和6设置为什么,以获得整个世界的视图(窗口是800/600)。

2 个答案:

答案 0 :(得分:2)

如果你想要第一人称视角,那么参数0 1 2将是玩家,3 4 5将是他们正在寻找的地方,6 7 8将是向上的。

gluLookAt(eye.x,eye.y,eye.z,center.x,center.y,center.z,up.x,up.y,up.z)

向上矢量 - 定义视图enter image description here

的“向上”

答案 1 :(得分:0)

根据评论中的说明,您希望看到的点(centerx)的x坐标随船舶位置而变化。所以这应该与ship3dPos.x相同。

我们仍需要弄清楚的一件事是船舶和外星人的z深度。我将假设他们现在是平等的,在这种情况下centerz将是那个深度。如果它们不相等,那么我们需要做更多的数学运算,下面centery的答案会略有变化。

你说你想向外星人'看',所以你需要比ship3dPos.y更大的y值。请记住,'lookAt'点可以是沿着视线的任何点,所以(再次,假设深度相同)ship3dPos.y+1.0将起作用,或者如果您对估计的500作为y感到满意你可以使用的外星人的位置。基本上,只要深度相同且外星人的y位置大于船舶的y位置,您就可以使用大于ship3dPos.y的任何东西。

根据上述假设,您的'lookAt'向量(centerx,centery,centerz)将为:

ship3dPos.x, ship3dPos.y+1.0, ship3dPos.z

但是你的gluLookAt()调用中还有一个组件需要注意:up向量。如果我们将up向量保留为(0,1,0),您仍然会直接进入屏幕。我将假设你真正想要的是沿着屏幕的平面(xy平面)看,在这种情况下up应该在z方向上,向上矢量将是:

0.0f, 0.0f, 1.0f

尝试一下,看看它是否符合你的想法。

相关问题