首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从剥皮pos中计算无皮pos

从剥皮pos中计算无皮pos
EN

Stack Overflow用户
提问于 2017-01-16 18:33:01
回答 1查看 72关注 0票数 0

嘿,伙计们,我在计算皮肤上的pos中的未剥皮的pos。

被剥皮的pos计算如下:

代码语言:javascript
复制
FMatrix Matrices[3];
float Weights[3];
FVector Pos;
FVector NewPos;
for( int i = 0; i < 3; i++)
{
   NewPos += Matrices[i].TransformPosition(Pos) * Weights[i];
}

当知道矩阵、权重和NewPos时,我如何计算Pos?

我知道,对于一个单一的转变,它是:

代码语言:javascript
复制
 Pos = Matrices[0].InverseTransformPosition(NewPos / Weights[0]);    

是否有可能重新计算Pos,如果是的话,应该如何做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-17 01:49:29

您可以将这个TransformPosition调用看作矩阵乘以向量乘法。权值也可以应用于矩阵。所以你有

代码语言:javascript
复制
M1*pos*w1 + M2*pos*w2 + M3*pos*w3 = (w1*M1 + w2*M2 + w3*M3)*pos

换句话说,您可以使用权重来缩放矩阵,然后添加矩阵。结果将是一个单一的矩阵,它结合了您的整个操作。然后你可以用它的逆变换。

代码语言:javascript
复制
FMatrix Combined;
for( int i = 0; i < 3; i++) {
   Combined += Matrices[i] * Weights[i];
}
Combined *= 1 / Combined.M[3][3];
Pos = Combined.InverseTransformPosition(NewPos);

如果引擎正确地处理了齐次坐标,那么我除以右下角元素的规范化步骤就不应该是必要的,但显然不是这样。因此,如果矩阵可能表示非仿射投影转换(最后一行不是FVector ),则不应该使用FVector4,而是使用FVector4。如果想要使用FVector,就必须像我上面所做的那样,缩放矩阵以生成最后一行0 0 0 1

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

https://stackoverflow.com/questions/41682901

复制
相关文章

相似问题

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