【问题标题】:What is the correct or most optimal way to drawing dynamic geometry绘制动态几何图形的正确或最佳方法是什么
【发布时间】:2026-01-14 23:40:01
【问题描述】:

处理不断变化的顶点数据对象(例如:动画 3D 模型)的最佳方法是什么。对于静态几何,最好的方法(我相信)是将顶点数据存储在单个 VBO(vertextBuffer 对象)中,然后将此绑定到 VAO(顶点数组对象)中。但我不知道如何处理动态几何。每个模型都使用 VBO?然后链接到单个 VAO?

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

    变换矩阵。

    您应该了解 MVP(模型视图和投影)矩阵,对吧?很好地考虑“子模型”,视图矩阵将我定位在场景中,模型矩阵旋转我,任何有意义的偏移(将我的本地原点移动到我的躯干而不是我的左脚......)等等.

    现在考虑我的上臂,它相对于我的躯干旋转/定位,由 MV(模型视图)矩阵定位,因此使用 U 表示上臂,v 表示顶点,PVMUv 表示顶点我的上臂,我们首先将它们移动 U,然后移动 M,然后移动 V,然后投影结果(V 将是列向量,我更喜欢数学家的方式)

    现在考虑 L,我的下臂,相对于我的上臂。并将 v 重新定义为我下臂的顶点。

    PVMULv 首先用 L 平移一个顶点,它可以是一个旋转(关于局部原点或肘部),然后由 U 转换,可以看作是肩膀,然后像往常一样通过 PVM 转换。现在如果你改变 U,下臂会随之移动,如果你改变 L,只有下臂顶点会受到影响。

    这是骨骼动画的基础知识。这意味着您只需要存储一组几何图形,然后像往常一样来回推动矩阵。如果您在模型文件中播放动画,您将存储下臂顶点的 UL,这样您就不必在运行时计算它,如果动画师在编译(或“设计”时)处理肢体,这是有道理的

    【讨论】:

    • 大多数角色模型都以这样的方式绑定到骨架上,即每个顶点的位置取决于多个附近骨骼的变换的某种混合,而不是仅仅复制单个骨骼的变换。
    • 非常感谢,我帮了大忙!我感谢您为答案付出了这么多努力。另一方面,我的问题集中在以下方面:对于每个 3D 模型必须创建一个单独的 Vbo?然后将其添加到单个 vao 中?非常感谢
    • @user2303826 你应该接受它,如果它回答了你的问题,请单击勾号。
    最近更新 更多