【问题标题】:animating a model without redrawing the whole background drawing --OPENGL动画模型而不重绘整个背景图--OPENGL
【发布时间】:2015-03-17 05:50:33
【问题描述】:

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

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

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

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

【问题讨论】:

  • 重绘整个场景是正常的做法。对于简单的动画和形状,避免重绘三角形是不值得的。与往常一样,避免过早的优化。这是你试图做的一个巨大的过早优化。

标签: c++ c opengl glut


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    你不能!因为它只是没有意义!

    电脑屏幕的工作方式与电影相同:fps!每秒帧数。屏幕中没有“动画”之类的东西,它只是一系列快速的静态图像,但由于我们的眼睛看不到快速移动的东西,所以它看起来像是在移动。

    这意味着每次你想要绘制的东西发生变化时,你都需要为那个阶段创建一个新的“静态图像”,这是通过所有glVertex 等代码来完成的。完成绘图后,您希望将其放在屏幕上,因此您可以交换缓冲区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 2021-10-02
      相关资源
      最近更新 更多