在不重新绘制整个背景图的情况下为模型制作动画--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 的当前内容复制到主帧缓冲区
我正在使用 OPENGL 制作一个简单的动画,其中一个小三角形将穿过我用鼠标 (glutMotionFunc) 创建的路径。
所以问题是如何在不使用 glutSwapBuffers() 重新绘制整个路径的情况下为小三角形设置动画;
还有,我怎样才能只旋转那个三角形。
我不想使用 overlay,因为在这两层之间切换需要很长时间。
你不能!因为它根本没有意义!
计算机屏幕的工作方式与电影相同:fps!每秒帧数。屏幕上没有"animation"那样的东西,它只是一系列快速的静态图像,但由于我们的眼睛看不到快速移动的东西,所以它看起来像是在移动。
这意味着每当你想画的东西发生变化时,你需要创建一个新的"static image"那个阶段,然后用所有glVertex
等部分来完成的代码。完成绘图后,您希望将其显示在屏幕上,因此交换缓冲区。
如果重绘整个路径真的太昂贵了,你可以渲染到屏幕外的帧缓冲区。使用 OpenGL 执行此操作的机制称为帧缓冲区对象 (FBO)
详细解释如何使用 FBO 超出了此处的回答范围,但您应该能够找到教程。您将使用如下函数:
glGenFramebuffers()
glBindFramebuffer()
glFramebufferRenderbuffer()
或glFramebufferTexture()
这样,无论何时添加新三角形,您都可以只在 FBO 中绘制额外的三角形。要在屏幕上显示您的渲染,您可以使用 glBlitFramebuffer()
.