我正在尝试将我的太空入侵者游戏切换到第一人称视角,也就是从船上看世界。我有点困惑,我不知道我应该看什么点。我目前在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)。
发布于 2012-12-10 01:03:22
如果你想要第一人称视图,那么params 0 1 2将是玩家,3 4 5将是他们看的地方,6 7 8将是向上的。
gluLookAt(eye.x,Ey.y,Ey.z,center.x,center.y,center.z,up.x,up.y,up.z)
Up vector -定义视图的"up“是什么

发布于 2012-12-10 00:55:16
根据注释中的说明,您希望所查看的点(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),你仍然会直接看着屏幕。我假设你真正想要的是沿着屏幕的平面( x-y平面)看,在这种情况下,up应该在z方向上,向上的向量是:
0.0f, 0.0f, 1.0f试一试,看看它是否做了你认为应该做的。
https://stackoverflow.com/questions/13781874
复制相似问题