gluLookAt()不看它应该在哪里
gluLookAt() not looking where it should
我不明白 glLookAt() 函数到底做了什么。
我在位置 x,y,z 有一个对象。我想在物体移动时将相机放置在 x+20,y+20,z+20 的位置,这样它看起来应该是静止的。然而,情况并非如此:当我执行以下代码时,我看到一个十字向右缓慢移动,甚至超出了 window !
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
OpenGL 是状态机,不是场景图库。它不记得您绘制的对象。使用您的代码,您首先绘制对象(使用当前的任何矩阵),然后设置新的视图矩阵。这将不会影响在此帧中已经绘制的对象。
当循环执行上述代码时,这将产生相机始终从上一帧开始查看对象位置的效果,并且对象移动得越快,它就会离相机越远.
在绘制对象之前设置矩阵。
我不明白 glLookAt() 函数到底做了什么。
我在位置 x,y,z 有一个对象。我想在物体移动时将相机放置在 x+20,y+20,z+20 的位置,这样它看起来应该是静止的。然而,情况并非如此:当我执行以下代码时,我看到一个十字向右缓慢移动,甚至超出了 window !
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
OpenGL 是状态机,不是场景图库。它不记得您绘制的对象。使用您的代码,您首先绘制对象(使用当前的任何矩阵),然后设置新的视图矩阵。这将不会影响在此帧中已经绘制的对象。
当循环执行上述代码时,这将产生相机始终从上一帧开始查看对象位置的效果,并且对象移动得越快,它就会离相机越远.
在绘制对象之前设置矩阵。