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

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

本文关键字:情况下 模型 设置 --OPENGL 动画 背景      更新时间:2023-10-16

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

因此,问题是如何在不使用glutSwapBuffers()重新绘制整个路径的情况下制作一个小三角形的动画;

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

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

如果重新绘制整个路径确实太昂贵,可以对屏幕外的帧缓冲区进行渲染。用OpenGL实现这一点的机制称为帧缓冲对象(FBO)

详细解释如何使用FBO超出了这里的答案范围,但您应该能够找到教程。您将使用以下功能:

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

这样,只要添加了新的三角形,就可以在FBO中只绘制额外的三角形。要在屏幕上显示渲染,可以使用glBlitFramebuffer()将FBO的当前内容复制到主帧缓冲区。

你不能!因为这根本没有道理!

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

这意味着,每当你想要绘制的东西发生变化时,你都需要创建一个该阶段的新"静态图像",这是用所有的glVertex等代码完成的。一旦你完成绘制,你想把它放在屏幕上,所以你交换你的缓冲区。