c++ - 绘制动态几何的正确或最佳方法是什么

标签 c++ opengl

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

最佳答案

变换矩阵。

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

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

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

PVMULv 首先通过 L 平移顶点,这可以是旋转(绕局部原点或肘部),然后通过 U 进行变换(可以将其视为肩部),然后像往常一样通过 PVM 进行变换。现在,如果更改 U,下臂也会随之移动,如果更改 L,则仅影响下臂顶点。

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

关于c++ - 绘制动态几何的正确或最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19150547/

相关文章:

c++ - 第三人称相机翻转循环

C++:数字常量之前的预期标识符

c++ - 表面积/体积

c++ - 纹理周围的边框,OpenGL

cocoa - 使用图层支持的 NSOpenGLView 会大幅减慢速度

opengl - 是否可以围绕它自己的轴而不是围绕基坐标轴旋转对象?

c++ - 使用 MPFR 时如何在 Boost Multi precision 中设置舍入模式

C++函数指针;没有匹配功能

c++ - 是否可以使用自己编译的 Chromium Embedded 来编译 CefSharp?

c++ - 在着色器中访问SSBO时程序崩溃