首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gluLookAt第一人称视图

gluLookAt第一人称视图
EN

Stack Overflow用户
提问于 2012-12-09 04:56:53
回答 2查看 3.9K关注 0票数 0

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

代码语言:javascript
复制
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)。

EN

回答 2

Stack Overflow用户

发布于 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“是什么

票数 2
EN

Stack Overflow用户

发布于 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)将为:

代码语言:javascript
复制
ship3dPos.x, ship3dPos.y+1.0, ship3dPos.z

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

代码语言:javascript
复制
0.0f, 0.0f, 1.0f

试一试,看看它是否做了你认为应该做的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13781874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档