opengl - gluLookAt() 没有看它应该看的地方

标签 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

最佳答案

OpenGL是一个状态机,而不是一个场景图库。它不记得您绘制的对象。使用代码,首先绘制对象(使用当前的任何矩阵),然后设置新的 View 矩阵。这不会对该帧期间已绘制的对象产生任何影响。

当上述代码在循环中执行时,这将产生这样的效果:相机始终从上一帧开始查看对象的位置,并且对象移动得越快,它离相机的距离就越远。

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

关于opengl - gluLookAt() 没有看它应该看的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29463825/

相关文章:

c++ - OpenGL VBO批处理最佳做法

qt - Qt中的OpenGL深度测试不起作用

c++ - OpenGL 闪烁/损坏,窗口调整大小和 DWM 处于事件状态

c++ - Opengl 鼠标相机问题 (gluLookAt)

opengl - gluPerspective、glViewport、gluLookAt 以及 GL_PROJECTION 和 GL_MODELVIEW 矩阵

c++ - OpenGL GLSL 片段着色器中的随机数

c++ - OpenGL 组合旋转

android - OpenGL ES : glOrtho() shows object, 但 gluPerspective() 没有

c++ - 我们怎样才能制作聚光灯

java - Java中的OpenGL,手动创建gluLookAt矩阵