在网格加载和处理期间如何转换蒙皮网格?

Posted

技术标签:

【中文标题】在网格加载和处理期间如何转换蒙皮网格?【英文标题】:How do you transform a Skinned Mesh during mesh loading and processing? 【发布时间】:2011-12-20 19:26:51 【问题描述】:

我创建了自己的蒙皮网格加载器。它工作正常,但我的问题是我不知道如何变换(缩放和旋转)蒙皮网格,以便将变换“​​烘焙”到顶点上。如果它只是一个几何体,那么转换顶点是小菜一碟,但是现在涉及到蒙皮信息,例如,如果我做一个缩放,我的网格就会被拉伸。我知道我也需要转换我的蒙皮数据,但是哪些部分呢?所有的绑定姿势矩阵?反向绑定姿势矩阵?我似乎无法理解如何解决这个问题。

我的实现是在 C# 和 OpenTK 中,我专门加载从 Blender 2.6 导出的 Skinned Collada 文件。

提前致谢。

【问题讨论】:

【参考方案1】:

我不了解 C# 和 OpenTK,但我尝试在理论上提供帮助。顶点通过加权全局变换矩阵进行变换。要形成全局变换,您需要连接每个关节的局部变换。要创建局部变换,您需要连接局部平移、旋转和缩放。重量将来自关节。所以我认为你需要获得绑定姿势的联合局部旋转/平移/缩放,然后操纵这些局部矩阵并将它们形成为全局矩阵。之后,将权重应用于全局变换,然后变换顶点。

以下链接可能与您的问题类似。 COLLADA: Inverse bind pose in the wrong space?

我创建了这个 collada 文件播放器,但使用的是 C++。 http://www.youtube.com/watch?v=bXBfVl-msYw

【讨论】:

以上是关于在网格加载和处理期间如何转换蒙皮网格?的主要内容,如果未能解决你的问题,请参考以下文章

Assimp:手动操纵绑定网格的骨骼

从 FBX 加载蒙皮信息

如何克隆蒙皮网格?

如何在 ngoninit 期间在 ag 网格中使用 showLoadingOverlay

关于Unity中蒙皮网格和布料的使用

从 COLLADA 将蒙皮网格导入 PaperVision3d 3.0 时遇到问题