java gluLookAt第一人称视图
我正在尝试将我的太空入侵者游戏切换到第一人称视角,即从飞船上看世界。我有点搞不清楚我应该看哪一点。我目前正在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)
# 1 楼答案
如果您想要第一人称视图,则参数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)
上方向向量-定义视图
# 2 楼答案
根据您评论中的说明,您希望您所观察点的x坐标(
centerx
)随船舶位置而变化。因此,这可能与ship3dPos.x
相同我们仍然需要弄清楚的一件事是飞船和外星人的z深度。我现在假设它们是相等的,在这种情况下
centerz
就是这个深度。如果它们不相等,那么我们需要再做一点数学运算,下面centery
的答案将略有变化你说你想“仰望”外星人,所以你需要一个比
ship3dPos.y
更大的y值。记住,“注视”点可以是视线上的任何点,因此(再次假设深度相同)ship3dPos.y+1.0
将起作用,或者如果你对外星人的y位置估计为500感到满意,你也可以使用它。基本上,只要深度相同,外星人的y位置大于飞船的y位置,你就可以使用任何大于ship3dPos.y
的东西根据上述假设,您的“注视”向量(centerx、centery、centerz)将为:
但是在gluLookAt()调用中还有一个组件需要注意:
up
向量。如果我们将up
向量保留为(0,1,0),您仍然可以直接查看屏幕。我假设你真正想要的是沿着屏幕的平面(x-y平面)看,在这种情况下up
应该在z方向,上方向向量是:试一试,看看它是否做了你认为应该做的事情