首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >帮助理解gluLookAt()

帮助理解gluLookAt()
EN

Game Development用户
提问于 2011-05-30 01:41:36
回答 1查看 6.2K关注 0票数 5

我是openGL( 3个月)的新手,我请求帮助我理解gluLookAt()背后的基本原理。

目前,我大部分时间都在使用固定视图的openGL建模场景,我希望开始使用gluLookAt与键盘和鼠标回调相结合来“探索”我的场景。当我第一次意识到我可能不完全理解正在发生的事情时,我创建了一个简单的程序来处理gluLookAt的功能。

我的程序创建了一个使用glOrtho(-4,4, -4,4, -4,4)的世界,将我的区域限制在我放置标准glutSolidTeapot(0.5)的原点(0,0,0)附近。然后,为了创建一个围绕茶壶旋转的“照相机”,在一个空闲的回调函数中,我编写了以下代码

代码语言:javascript
运行
复制
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt( cos(business), 0, sin(business), 0.0,0.0,0.0, 0.0,1.0,0.0 /*up vector*/ );
glutPostRedisplay();

结果这起作用了。图中展示了一个旋转茶壶。因此,我再次尝试在茶壶周围创建一条椭圆路径,将cos()或sin() (不是两者兼而有之)乘以2,这也有效,但没有我所期望的效果。这幅图围绕着茶壶旋转,但我想象着茶壶沿着这条路走来,茶壶在点上会“看起来”更近,某种程度上是在放大效果。这引出了我的问题。

我到底有什么不明白的?或者..。为什么这不符合我的预期呢?

EN

回答 1

Game Development用户

回答已采纳

发布于 2011-05-30 02:11:13

这很简单。你使用的是正投影(观察光线是平行的),所以如果你在距离1或100,它不会有任何区别。

使用gluPerspective,它将按照您的预期工作。

(左img正交投影,右img透视proj)

代码可能如下所示:

代码语言:javascript
运行
复制
glMatrixMode(GL_PROJECTION);
gluPerspective( PI / 3.0f, window_width/window_height, zNear, zFar);

...

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt( cos(business) * radius, 0, sin(business) * radius, 0.0,0.0,0.0, 0.0,1.0,0.0 /*up vector*/ );
glutPostRedisplay();

img源

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

https://gamedev.stackexchange.com/questions/12885

复制
相关文章

相似问题

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