帮助理解gluLookAt()

我相当新的OpenGL(3个月),并要求帮助理解gluLookAt()背后的基础。

目前,我大部分时间都是在openGL建模场景中使用固定的视图,我想用gluLookAt和键盘和鼠标的callback来“探索”我的场景。 我创建了一个简单的程序,当我第一次意识到我可能不完全理解正在发生的事情时,发挥了gluLookAt的function。

我的程序使用glOrtho(-4,4, -4,4, -4,4)创建一个世界glOrtho(-4,4, -4,4, -4,4)将我的区域限制在原点(0,0,0)的周围,在该原点上放置标准的glutSolidTeapot(0.5) 。 然后为了创造一个“相机”围绕茶壶,在一个空闲的callback函数,我写这个

 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(); 

原来,这工作。 视图显示一个转动的茶壶。 所以我又采取了一个步骤,尝试在茶壶周围创建一条椭圆形的path,将cos()或sin()(不是两个)乘以2.这同样适用,但是并没有达到我期望的效果。 视图围绕着茶壶旋转,但我想象着沿着茶壶“出现”的path靠近点,放大各种效果。 这导致我的问题。

我究竟对此不甚了解? 或..为什么这不是我所期望的?

这很简单。 你正在使用正射投影(观察光线是平行的),所以如果你的距离是1或100,那么它就没有什么区别。

使用gluPerspective ,它会工作如何你的期望。

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

你的代码可能是这样的:

 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源码