如何只使用gluPerspective一次?

jon*_*ham 1 c++ opengl perspective glu

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();
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,但有没有办法删除对gluPerspective的调用?

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

dat*_*olf 5

你在那里打电话给gluPerspective,因为它属于那里.OpenGL不是初始化事物的场景图.这是一个状态驱动的绘图API.投影矩阵是一种状态,并且每个严肃的图形应用程序在单个帧渲染中多次改变该状态.

OpenGL不了解几何对象,位置和相机.它只是通过处理管道推动点,线和三角形,并将结果绘制到屏幕上.在绘制了一些东西之后,无论如何,OpenGL都没有回忆它.

我的意思是在初始化时只调用一次.

OpenGL没有初始化(除了创建渲染上下文,但实际上这是操作系统的图形堆栈的一部分,而不是OpenGL).当然,你上传纹理和缓冲对象数据,但这可能随时发生.