【问题标题】:How to handle animation that contains multiple objects in OpenGL?如何在OpenGL中处理包含多个对象的动画?
【发布时间】:2014-09-18 05:36:03
【问题描述】:

我需要创建一个 OpenGL 动画,它主要包含两个对象,一个包含数百个顶点的简单对象(例如平面),以及包含数十万个顶点的非常复杂的对象(例如城市)。这两个对象都是不雅地创建的。现在我需要将它们都放入动画中。例如,在动画中,我们从天空俯视这座城市,而一架飞机从屏幕上飞过。由于城市模型非常复杂,需要几分钟才能渲染,因此不可能在每一帧都渲染飞机和城市。所以我的问题是,如何在 OpenGL 中独立渲染多个对象?我需要在每一帧渲染城市吗?我可以“修复”城市对象并在每一帧刷新飞机吗?

我已经阅读了诸如红皮书等参考资料。也许我不明白,但他们似乎没有教如何处理上述问题。有人可以帮帮我吗?

【问题讨论】:

    标签: c++ opengl animation render


    【解决方案1】:

    由于城市模型非常复杂,需要几分钟才能渲染,

    少于 100 万个顶点的分钟数?现代 GPU 每秒可以推出数亿个顶点!你应该摆脱这个瓶颈,而不是试图用分层渲染来覆盖它。

    看看你的代码。有人打电话给glBeginglVertex 吗?如果是这样,那么这就是你的问题所在。那些电话很慢。不要使用它们。使用顶点数组和顶点缓冲区对象为 GPU 很好地进行批处理。

    所以我的问题是,如何在 OpenGL 中独立渲染多个对象?

    从技术上讲,每个三角形独立于所有其他三角形进行渲染。您可能会考虑分层渲染。不要这样做,除非你知道自己在做什么(你不是 BTW)。

    【讨论】:

    • 感谢 datenwolf!是的,我使用了 glBegin 和 glVertex。我不熟悉顶点数组和顶点缓冲区对象,或者分层渲染。你能推荐一些参考资料吗?
    • @Aaron:分层渲染可能是一个太高级的话题,你现在无法解决;您必须了解像 OpenGL 实现这样的重新渲染器的所有方面才能有效地使用它。自 1996 年以来,顶点数组是使用 OpenGL 绘制事物的推荐方式;任何仍然使用 glBegin / glVertex 的教程都不值得一读。这是恕我直言,目前关于 OpenGL 的最佳教程是:arcsynthesis.org/gltut
    • 谢谢!在这个练习中,我主要是按照红皮书第 7 版上的示例进行的。我会按照你的建议研究 VAO 和 VBO。再次感谢!
    • 对于“渲染分钟数”,我猜提问者可能会每帧重新读取一个 .obj 文件,然后再次重新读取它以通过索引查找每个顶点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多