0

我正在尝试将我的太空侵略者游戏切换到第一人称视角,即从飞船上看世界的视角。我对我应该看什么有点困惑。我目前在 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)。

4

2 回答 2

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)

向上向量 - 定义视图的“向上”是什么在此处输入图像描述

于 2012-12-09T17:03:21.683 回答
0

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

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

你说你想“向上”看外星人,所以你需要一个比 更大的 y 值ship3dPos.y。请记住,“lookAt”点可以是视线上的任何点,因此(再次假设深度相同)ship3dPos.y+1.0将起作用,或者如果您对估计为 500 作为外星人的 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

试一试,看看它是否符合您的要求。

于 2012-12-09T16:55:15.617 回答