SceneKit SCNGeometrySourceSemanticBoneIndices几何源实际索引中的骨骼索引是什么?

时间:2014-12-17 14:45:53

标签: swift ios8 scenekit

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个骨骼:

  • 0:可选(" mouth_Head")
  • 1:可选(" Jaw")
  • 2:可选(" LipLowerL")
  • 3:可选(" LipLowerR")
  • 4:可选(" Nostrils")
  • 5:可选(" LipUpperL")
  • 6:可选(" LipUpperR")
  • 7:可选(" LipCornerR")
  • 8:可选(" LipCornerL")
  • 9:可选(" CheekL")
  • 10:可选(" CheekR")

当我阅读SCNGeometrySourceSemanticBoneIndices源码并制作时 引用所有唯一骨骼索引的字典,我看到那里 确实是网格引用的11个骨骼:

  • 骨骼指数12:69 refs
  • 骨骼指数18:82 refs
  • 骨骼指数9:165 refs
  • 骨骼指数21:153 refs
  • 骨骼指数30:69 refs
  • 骨骼指数6:466 refs
  • 骨骼指数15:88 refs
  • 骨骼指数27:170 refs
  • 骨骼指数24:179 refs
  • 骨骼索引0:1267 refs
  • 骨骼指数3:201 refs

你会注意到大多数指数都在0-10范围之外,所以 显然他们没有索引到skinner的骨骼阵列,因为 文档会建议。

我认为也许场景将其节点存储在一个平面阵列中 内部的性能,索引正在索引(网格的skinner的骨架属性是场景的rootNode)。

我已尝试过所有节点的深度优先和广度优先排序 在场景中,从rootNode开始,仍然是骨骼索引 在SCNGeometrySourceSemanticBoneIndices中没有任何意义 - 他们 不对应skinner的骨骼数组中的骨骼。同样从场景中的第一个关节点开始的两个排序...

0 个答案:

没有答案