4

私は本質的にここにあるものと同じ質問をしています - https://github.com/mrdoob/three.js/issues/1883 - 3つのjsを使用して、基本的なキーフレームアニメーションを含むcolladaシーンをインポートし、それらのアニメーションを再生できます簡単にできますが、あるシーン オブジェクトから別のシーン オブジェクトにアニメーション データをコピーしたいと考えています。

それは可能ですか?

実行時に、collada.animations オブジェクトに collada.animations[n].node が含まれていることに気付きました。これは、実行時に置き換えようとしていた THREEJS.Mesh オブジェクトのようです (無駄に)。また、collada.animations[n].hierarchy[n] オブジェクトには、次のようなノード プロパティも含まれていることに気付きました。

cameras: Array[0]
channels: Array[9]
controllers: Array[0]
endTime: 2.5
geometries: Array[1]
id: "name_of_exported_object"
keys: Array[2]
matrix: THREE.Matrix4
name: "name_of_exported_object"
nodes: Array[0]
sid: null
sids: Array[9]
startTime: 0
transforms: Array[5]
type: "NODE"

このオブジェクトは、.name と .id によって、3D パッケージ (Blender) で作成した "name_of_exported_object" に関連付けられているように見えます... このノード オブジェクトが何のためにあるのかよくわかりません。collada.animation[n] オブジェクトを十分に変更して、動的に作成されたシーン オブジェクトで同じアニメーションを使用するにはどうすればよいですか?

4

1 に答える 1

3

この質問は数年前に書かれて以来、three.js アニメーション システムが書き直されました。アニメーションを「複製」する必要はなくなりました。別のミキサを使用して、アニメーションを他のオブジェクトに簡単に適用できます。例:

var clip; // some THREE.AnimationClip instance.

var mixer1 = new THREE.AnimationMixer( object1 );
var mixer2 = new THREE.AnimationMixer( object2 );

var action1 = mixer1.clipAction( clip );
var action2 = mixer2.clipAction( clip );

action1.play();
action2.play();

これは COLLADA に固有のものではなく、FBX、glTF、および three.js がアニメーションをサポートするその他のフォーマットで機能します。

于 2018-01-07T06:36:51.697 に答える