SCNGeometrySourceSemanticBoneIndices源中存储了哪些索引? 文档含糊不清:
以下是关于SCNSkinner的boneIndices几何源(我正在解析以生成下面的骨骼索引的文档)的文档说明https://developer.apple.com/library/mac/documentation/SceneKit/Reference/SCNSkinner_Class/#//apple_ref/occ/instp/SCNSkinner/boneIndices:
"讨论
此几何源的语义属性必须是SCNGeometrySourceSemanticBoneIndices。其数据是一个整数向量数组,每个向量对应于boneWeights几何源中的权重向量。向量中的每个组件都指定骨骼数组中相应骨骼权重组件的节点索引。"
SCNGeometrySourceSemanticBoneIndices的文档可以这样说https://developer.apple.com/library/mac/documentation/SceneKit/Reference/SceneKit_Constants/index.html#//apple_ref/c/data/SCNGeometrySourceSemanticBoneIndices:
"骨骼索引数据的语义,用于蒙皮表面的骨架动画。
对于几何源,此语义标识包含几何中每个顶点的骨架动画数据的数据。 SceneKit使用此信息来确定骨架中的哪些骨骼节点会影响每个顶点的行为。
对于自定义着色器程序,您可以使用此语义将SceneKit的骨骼索引数据绑定到着色器的输入属性。"
在我的情况下,网格的skinner骨骼数组有11个骨骼:
当我阅读SCNGeometrySourceSemanticBoneIndices源码并制作时 引用所有唯一骨骼索引的字典,我看到那里 确实是网格引用的11个骨骼:
你会注意到大多数指数都在0-10范围之外,所以 显然他们没有索引到skinner的骨骼阵列,因为 文档会建议。
我认为也许场景将其节点存储在一个平面阵列中 内部的性能,索引正在索引(网格的skinner的骨架属性是场景的rootNode)。
我已尝试过所有节点的深度优先和广度优先排序 在场景中,从rootNode开始,仍然是骨骼索引 在SCNGeometrySourceSemanticBoneIndices中没有任何意义 - 他们 不对应skinner的骨骼数组中的骨骼。同样从场景中的第一个关节点开始的两个排序...