4

Mac OS X で SceneKit を使用して COLLADA (DAE) ファイルをロードすると、SCNNode:s とそれぞれの SCNGeometry:s のツリーをトラバースすることですべてのジオメトリを簡単に取得でき、[geometry geometrySourcesForSemantic: SCNGeometrySourceSemanticVertex] を使用して頂点データを抽出できます。

ただし、アニメーション化されたオブジェクトを含む DAE ファイルが与えられた場合、SceneKit はアニメーションの特定の時間における各頂点の正確な位置を提供できますか、または関連する CAAnimation オブジェクトからすべてのアニメーション データを抽出できますか?

私の使用例は、SceneKit を使用して DAE ファイルをインポートしたいが、それ以外はすべて独自のレンダリング パイプラインを使用したいというものです。

明確化 これを達成する方法は明らかに 2 つあります。

1) 関連するアニメーションからキー フレームを取得して解析する

2) SceneKit に所定の時間シーンを評価させ、事前に計算された頂点 (など) 座標を提供します。

私のユースケースで目指していたのは #2 でしたが、SceneKit で使用されているキー フレーム フォーマットのドキュメントを見つけることができれば #1 でもかまいません。

私の問題は、#1の場合、次のこと以上を掘り下げることができないことです。

SCNNode.animationKeys は、指定された SCNNode で使用できるアニメーション キーを提供します。[SCNNode animationForKey:key] 指定された CAAnimationGroup オブジェクトから、CAAnimationGroup.animations を介して CAAnimation オブジェクトが取得されます。CAAnimation オブジェクトは (私の DAE ファイルの場合) 実際には CAKeyframeAnimation のインスタンスであり、そこから CAKeyframeAnimation.values を取得します。

Keyframe (1 / 40): <00000000 0000f0bf 00000080 d9956d3c 000000a0 0e32a13c 00000000 00000000 00000020 636772bc 00000020 2914ef3f 00000000 0f7ecebf 00000000 00000000 00000020 1324a1bc 00000000 0f7ecebf 00000020 2914efbf 00000000 00000000 00000000 00000000 000000c0 205c6d40 00000000 00a069c0 00000000 0000f03f>

など.. したがって、上記の #1 のアプローチを解決するには、これらのキー フレームに使用される形式を見つける必要があります。

4

2 に答える 2