我正在尝试将我的太空入侵者游戏切换到第一人称视角,即从船上看世界。关于我应该关注什么,我感到有些困惑。我目前在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)。
答案 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)
向上矢量 - 定义视图
的“向上”答案 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
尝试一下,看看它是否符合你的想法。