glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

//set viewpoint
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(VIEW_ANGLE,Screen_Ratio,NEAR_CLIP,FAR_CLIP);
gluLookAt(0,5,5, 0,0,0, 0,1,0);

//transform model 1
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(Theta, 0,1,0);

//draw model 1
glBegin(GL_QUADS);
...
glEnd();

上面的代码工作正常,但是有什么方法可以删除对gluPerspective的调用?

我的意思是,我只想在初始化时调用一次,而不是在每次渲染时都重复调用。

最佳答案

您在此处调用gluPerspective,因为它属于此处。 OpenGL并非用于初始化事物的场景图。这是一个状态驱动的绘图API。投影矩阵是一种状态,每个严肃的图形应用程序都会在单个帧渲染过程中多次更改此状态。

OpenGL不知道几何对象,位置和相机。它只是将点,线和三角形推入处理流水线,并将结果绘制到屏幕上。绘制完某些内容后,OpenGL不会对其进行任何记录。



OpenGL未初始化(创建渲染上下文除外,但实际上这是操作系统图形堆栈的一部分,而不是OpenGL)。当然,您可以上载纹理并缓冲对象数据,但这可以随时发生。

关于c++ - 如何仅一次使用gluPerspective?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7222559/

10-13 09:42