c# - 在网格加载和处理过程中如何转换蒙皮网格?

标签 c# skinning mesh collada

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

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

提前致谢。

最佳答案

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

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

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

关于c# - 在网格加载和处理过程中如何转换蒙皮网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7989177/

相关文章:

c# - .net 的 Windows.Forms.DataVisualization.Charting 程序集是否有替代方案?

c# - 找不到与命名空间 'urn:UmbracoHelper' 关联的脚本或扩展对象

c# - Silverlight 4 与 RIA + EntityFramework + MVVM : Childwindow DomainContext Load does not refresh

wpf - 在单独的项目中定义 WPF 资源时避免 Visual Studio 设计器错误

c++ - Qt - QScrollBar 皮肤问题

c++ - Havok - 你能在运行时改变对象的颜色吗?

c++ - 在 C++ 中创建 Wavefront .obj 文件(网格 3D)

c++ - 当我传递纹理坐标 (OpenGL) 时没有任何显示

c# - 为什么当 == 为 null 值返回 true 时 >= 返回 false?

flash - 如何更改 ActionScript 中文本区域的颜色?