gluLookAt()不看它应该在哪里

时间:2015-04-06 00:28:19

标签: opengl glulookat

我不明白glLookAt()函数究竟做了什么。

我在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

1 个答案:

答案 0 :(得分:2)

OpenGL是状态机,而不是场景图库。它不记得你画的对象。使用代码,首先绘制对象(使用当前的矩阵),然后设置新的视图矩阵。这对此框架中已绘制的对象没有影响。

当上述代码在循环中执行时,这将导致相机始终从最后一帧查看对象的位置,并且当对象移动得越快时,它将越远离相机。< / p>

在绘制对象之前设置矩阵