尝试实现索具:
- 使用 Blender 创建了一个简单的操纵蛇测试并导出了一个 COLLADA 文件。
- 我已经正确加载了顶点位置、权重和关节 ID。
- 我已经为每个骨骼加载了骨架关节层次结构和这些变换(我加载了将所有浮点数转换为浮点数 [16] 的矩阵,然后我使用 glm::make_mat4(tmpFloatArray),然后我转置它,不确定是否这是正确的方法):
<visual_scene id="Scene" name="Scene">
<node id="Armature" name="Armature" type="NODE">
<matrix sid="transform">1 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 1</matrix>
<node id="Armature_Bone" name="Bone" sid="Bone" type="JOINT">
<matrix sid="transform">0.3299372 0.944003 -1.78814e-7 0 -4.76837e-7 0 -1 0 -0.944003 0.3299374 3.8743e-7 0 0 0 0 1</matrix>
<node id="Armature_Bone_001" name="Bone.001" sid="Bone_001" type="JOINT">
<matrix sid="transform">0.886344 -0.4630275 3.31894e-7 2.98023e-8 0.4630274 0.886344 -1.86307e-7 1.239941 -2.07907e-7 3.18808e-7 1 -2.84217e-14 0 0 0 1</matrix>
<node id="Armature_Bone_002" name="Bone.002" sid="Bone_002" type="JOINT">
<matrix sid="transform">0.9669114 0.2551119 -1.83038e-7 -1.19209e-7 -0.2551119 0.9669115 1.29195e-7 1.219687 2.09941e-7 -7.82246e-8 1 0 0 0 0 1</matrix>
<node id="Armature_Bone_003" name="Bone.003" sid="Bone_003" type="JOINT">
<matrix sid="transform">0.8538353 0.5205433 1.0139e-7 -1.19209e-7 -0.5205433 0.8538353 2.4693e-7 1.815649 4.19671e-8 -2.63615e-7 1 5.68434e-14 0 0 0 1</matrix>
现在,如果我将每个骨骼的矩阵设置为 glm::mat4(1),我会得到:
但是,如果我尝试乘以关节父变换,就像在 Thin Matrix rigging tutorial 中一样,我会得到非常奇怪的结果:
void SkelManager::setTposeTransforms(std::vector<Joint>& _reference)
{
for (int child = 0; child < _reference.size(); child++)
{
if (_reference[child].parent == -1)
{
//_reference[child].tPose = glm::mat4(1);
_reference[child].tPose = _reference[child].transform;
}
for (int parent = 0; parent < _reference.size(); parent++)
if (_reference[child].parent == parent)
{
//_reference[child].tPose = glm::mat4(1);
_reference[child].tPose = _reference[parent].tPose * _reference[child].transform;
}
}
}
请帮忙,我已经坚持了几个星期,但我没有成功,无论我多么努力地搜索网络,我都找不到任何有用的东西,关于我可能做错的任何想法?