Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Animation 什么是逆绑定矩阵的正确映射?_Animation_Graphics_3d_Gltf_Skeletal Mesh - Fatal编程技术网

Animation 什么是逆绑定矩阵的正确映射?

Animation 什么是逆绑定矩阵的正确映射?,animation,graphics,3d,gltf,skeletal-mesh,Animation,Graphics,3d,Gltf,Skeletal Mesh,glTF文件为每个蒙皮定义一个反向绑定矩阵数组和关节列表 假设关节列表为: {2,5,7,4,3,6} 如果我们移动它,使指数从0开始,我们得到 {0,3,5,2,1,4} 在这个场景中,逆矩阵[2]可以指两件事中的一件。它可以引用数组中的第二个关节,即关节5,也可以引用关节2 同样的问题也适用于权重数组 换一种方式。如果从gltf文件按原样获取数据并将缓冲区加载到着色器中。我需要弄清楚如何将着色器中的顶点索引映射到对应的4个蒙皮矩阵 因此,如果关节[2]映射到(3,1,0,0) 我需要知道我是

glTF文件为每个蒙皮定义一个反向绑定矩阵数组和关节列表

假设关节列表为:

{2,5,7,4,3,6}

如果我们移动它,使指数从0开始,我们得到

{0,3,5,2,1,4}

在这个场景中,
逆矩阵[2]
可以指两件事中的一件。它可以引用数组中的第二个关节,即关节5,也可以引用关节2

同样的问题也适用于权重数组

换一种方式。如果从gltf文件按原样获取数据并将缓冲区加载到着色器中。我需要弄清楚如何将着色器中的顶点索引映射到对应的4个蒙皮矩阵

因此,如果
关节[2]映射到(3,1,0,0)

我需要知道我是否应该在
ibm[3]
ibm[1]
ibm[2]
ibm[3]
获取反向绑定矩阵(因为
joints[3]
处的值是2)

我希望这不会令人困惑。

说(我的重点)

每个蒙皮由
InverseBindMatrix
属性定义(该属性指向具有IBM数据的访问器),用于将蒙皮的坐标带入与每个关节相同的空间;以及一个
joints
数组属性,该属性列出了用作关节的节点索引,以设置蒙皮动画关节的顺序在
皮肤.关节
数组中定义,它必须与
逆索引矩阵
数据的顺序匹配。

这直接回答了你的问题。我将在这里给出更详细的解释:

  • 有两个ID:节点ID和关节ID
  • 节点ID:
    节点
    数组中节点的索引
  • 关节ID:
    关节
    数组中关节的索引
    • 使用节点ID指定
      关节
      数组中的关节;但关节ID不同
“节点”:[
{                           // 0
“名称”:“洞穴”
},
{                           // 1
“名称”:“尾骨”,
},
//为布里维蒂剪断
{                           // 29
“名称”:“根”
}
],
“皮肤”:[
{
“逆宾得矩阵”:6,
“关节”:[
29,
1.
]
}
]
对于该
.glTF
逆宾德矩阵[0]
将用于
关节[0]
,该关节由节点29给出
inverseBindMatrix[1]
将用于关节[1],该关节由节点1给出

如果我们移动它,使指数从0开始,我们得到

{0,3,5,2,1,4}

我认为这是不对的。你为什么要换班?在消化glTF数据并将其加载到您自己的结构中之前,您基本上只需要在节点ID和骨骼ID之间进行映射(在此之后,节点ID与骨骼ID不同没有任何用处)

计算
蒙皮
矩阵时,请确保遵循
关节
阵列的顺序。在上面的示例中,
skin[0]
应该用于关节[0],即节点29

Node   Bone
29      0
1       1