2015-04-06 46 views
2

我不明白glLookAt()函数是干什么的。gluLookAt()不看它应该在什么地方

我在位置x,y,z有一个对象。当物体移动时,我想将相机放置在位置x + 20,y + 20,z + 20处,以使其看起来像静止。但是,情况并非如此:当我执行下面的代码时,我看到一个十字会慢慢向右移动,甚至从窗口中移出!

while (keystate[SDLK_ESCAPE] == false) { 

SDL_PollEvent(&event); 

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

n+=0.1; 
float x = 10; 
float y = 10+n*n; 
float z = 10; 

// drawing an object at x,y,z (here a cross) 
glBegin(GL_LINES); 
glColor3ub(200,0,0); 
glVertex3f(x-2,y,z); 
glVertex3f(x+2,y,z); 
glVertex3f(x,y-2,z); 
glVertex3f(x,y+2,z); 
glEnd(); 

// looking at the object 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
gluLookAt(x+20,y+20,z+20,x,y,z,0,0,1); 

glFlush(); 
SDL_GL_SwapBuffers(); 

} 

如果相机正确地看着x,y,z,十字应该总是出现在中心?

如果我把y = 10 + n,对象看起来是静止的。当y = 10 + n * n时,物体以恒定速度移动,并且在y = 10 + n * n * n的情况下,物体移动并加速。

我也没有

gluPerspective(70,(double)640/480,1,1000); 

在我的代码的开始。

预先感谢您! :S

回答

2

OpenGL是一个状态机,而不是场景图库。它不记得你绘制的物体。用你的代码,你首先绘制对象(使用任何矩阵当前),然后设置新的视图矩阵。这对在此帧期间已绘制的对象没有影响。

当上面的代码在一个循环中执行时,这将产生一个效果,即相机总是从最后一帧查看对象的位置,并且随着对象移动速度越快,距离相机越远。

设置矩阵之前您绘制对象。

相关问题