- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我们的小型游戏引擎编写一个 fbx 转换器。我坚持使用动画渲染模型。每个时间戳的矩阵看起来都不错,当我只渲染骨骼时,它看起来也像原始动画。我做了一些快照来显示我的问题。我只是不知道出了什么问题。也许有人可以给我提示 :)
我用于测试的文件是来自 FBX-SDK 的 humanoid.fbx。
着色器应该没问题:
VS_OUT output = (VS_OUT)0;
float4x4 skinTransform = 0;
skinTransform += MatrixPallette[input.BoneIndices.x] * input.Weights.x;
skinTransform += MatrixPallette[input.BoneIndices.y] * input.Weights.y;
skinTransform += MatrixPallette[input.BoneIndices.z] * input.Weights.z;
skinTransform += MatrixPallette[input.BoneIndices.w] * input.Weights.w;
//skinTransform = mul(BindShape, skinTransform);
//Transform Position
float4 worldPosition = mul(input.Position, skinTransform);
float4 viewPosition = mul(worldPosition, matView);
output.Position = mul(viewPosition, matProj);
这是图片。 (右 -> 原始) http://www.pic-upload.de/view-13949399/Unbenannt.png.html
最佳答案
与其计算顶点的“皮肤变换”,我建议使用提供的变换计算变换后的顶点,然后使用权重获得组合位置。对两个矩阵进行插值确实不是一个好主意。
float4 worldPosition = 0;
worldPosition += mul(input.Position, MatrixPallette[input.boneIndicies.x]) * input.Weights.x;
worldPosition += mul(input.Position, MatrixPallette[input.boneIndicies.y]) * input.Weights.y;
worldPosition += mul(input.Position, MatrixPallette[input.boneIndicies.z]) * input.Weights.z;
worldPosition += mul(input.Position, MatrixPallette[input.boneIndicies.w]) * input.Weights.w;
但是,当您看到这种变形的物体时,通常意味着您忘记了将矩阵调色板乘以“反向骨骼变换”。反向骨骼变换是骨骼在“皮肤游行”姿势中的变换矩阵(即,对象已被装配的原始姿势)。要计算蒙皮对象的正确位置,您应该在矩阵调色板中存储组合变换 = inverse(skinParadeTransform)*currentTransform
。 Current transform 是骨骼在当前动画层次结构中的变换,skinParadeTransform 是“skin parade”模式下的原始骨骼变换。 inverse
是矩阵求逆(是的,你必须这样做)。
关于c++ - 使用 FBX 的骨骼动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10353110/
因此,除了索引之外,当我创建一个新项目并选择 conda 解释器时,还会启动更多需要数小时的进程。下面是一个快照。这些过程是什么?完成后它们会占用空间吗? 最佳答案 PyCharm 运行 genera
我是一名优秀的程序员,十分优秀!