在不重新绘制整个背景图的情况下为模型制作动画--OPENGL

animating a model without redrawing the whole background drawing --OPENGL

我正在使用 OPENGL 制作一个简单的动画,其中一个小三角形将穿过我用鼠标 (glutMotionFunc) 创建的路径。

所以问题是如何在不使用 glutSwapBuffers() 重新绘制整个路径的情况下为小三角形设置动画;

还有,我怎样才能只旋转那个三角形。

我不想使用 overlay,因为在这两层之间切换需要很长时间。

你不能!因为它根本没有意义!

计算机屏幕的工作方式与电影相同:fps!每秒帧数。屏幕上没有"animation"那样的东西,它只是一系列快速的静态图像,但由于我们的眼睛看不到快速移动的东西,所以它看起来像是在移动。

这意味着每当你想画的东西发生变化时,你需要创建一个新的"static image"那个阶段,然后用所有glVertex等部分来完成的代码。完成绘图后,您希望将其显示在屏幕上,因此交换缓冲区。

如果重绘整个路径真的太昂贵了,你可以渲染到屏幕外的帧缓冲区。使用 OpenGL 执行此操作的机制称为帧缓冲区对象 (FBO)

详细解释如何使用 FBO 超出了此处的回答范围,但您应该能够找到教程。您将使用如下函数:

  • glGenFramebuffers()
  • glBindFramebuffer()
  • glFramebufferRenderbuffer()glFramebufferTexture()

这样,无论何时添加新三角形,您都可以只在 FBO 中绘制额外的三角形。要在屏幕上显示您的渲染,您可以使用 glBlitFramebuffer().

将 FBO 的当前内容复制到主帧缓冲区