首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何实际计算和使用逆约束位姿的困惑?

如何实际计算和使用逆约束位姿的困惑?
EN

Computer Graphics用户
提问于 2018-05-09 15:25:20
回答 1查看 3.4K关注 0票数 3

我试着用Assimp来做骨骼动画,而逆绑定的姿态矩阵正好把我绊倒了。我将举一个小例子来说明我的观点。

代码语言:javascript
运行
复制
Root
    Bone A
        Bone B
            Bone C

假设我们有一个像上面这样的等级。要使根空间中的顶点进入C空间,我必须做(CBA) * v.逆约束位姿,它应该得到一个从骨空间到根空间的顶点,应该是这个位置的逆。因此,求逆约束矩阵的方法应该是(CBA)^-1或(A^-1)(B^-1)(C^-1)。公式是(A^-1)(B^-1)(C^-1) * v,这是有道理的。但是,我不能用(CBA)^-1再现Assimp的mOffsetMatrix (由Assimp计算的逆约束矩阵)的结果。(ABC)^-1,然而,令人惊讶的是,产生了正确的结果,尽管有一些微小的误差,我把它归因于浮点误差。

EN

回答 1

Computer Graphics用户

回答已采纳

发布于 2018-05-09 15:58:58

要使根空间中的顶点进入C空间,我必须做(CBA) * v。

嗯,是的。但这并不是你真正想要做的骨骼动画。You让它相反。

情况正好相反。假设您在C空间中有一个点,并希望计算它在根/全局空间中的位置,以便通过转换管道将其进一步抽运出来,这将使increasingly在每次转换时都具有更大的全局性,直到您的点最终进入眼睛空间(以及更深的位置)。这就是为什么A没有从根空间转换成A空间,而是从A空间转换为根空间。因此,$ABC$从C空间转换为根空间。

现在,您的网格顶点已经在根空间中,这就是反绑定位姿发挥作用的地方,它将点<#>from根空间转换为C空间。所以你基本上把你的点从根空间转换到C(或任何关节)空间,用逆约束矩阵,它只依赖于整个动画上的连接和常数,然后从这个连接空间返回到根空间,与动画相关的联合变换。

因此,框架$t$的C变换矩阵,它将顶点从一致的根空间(也就是定义网格的方式)转换为动画(相对于C的关节角)根空间,它将是$(A_RB_RC_R)^{-1}A(t)B(t)C(t)$,其中$M(t)$是动画时的局部连接矩阵$t$,$M_R$是对应于静止姿态的局部连接矩阵,定义网格的姿态,因此,$(A_RB_RC_R)^{-1}$是C的逆约束位姿。

票数 2
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/7603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档