|
@@ -2686,6 +2686,82 @@ THREE.ColladaLoader.prototype = {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ // physics
|
|
|
+
|
|
|
+ function parsePhysicsModel( xml ) {
|
|
|
+
|
|
|
+ var data = {
|
|
|
+ name: xml.getAttribute( 'name' ) || '',
|
|
|
+ rigidBodies: {}
|
|
|
+ };
|
|
|
+
|
|
|
+ for ( var i = 0; i < xml.childNodes.length; i ++ ) {
|
|
|
+
|
|
|
+ var child = xml.childNodes[ i ];
|
|
|
+
|
|
|
+ if ( child.nodeType !== 1 ) continue;
|
|
|
+
|
|
|
+ switch ( child.nodeName ) {
|
|
|
+
|
|
|
+ case 'rigid_body':
|
|
|
+ data.rigidBodies[ child.getAttribute( 'name' ) ] = {};
|
|
|
+ parsePhysicsRigidBody( child, data.rigidBodies[ child.getAttribute( 'name' ) ] );
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ library.physicsModels[ xml.getAttribute( 'id' ) ] = data;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function parsePhysicsRigidBody( xml, data ) {
|
|
|
+
|
|
|
+ for ( var i = 0; i < xml.childNodes.length; i ++ ) {
|
|
|
+
|
|
|
+ var child = xml.childNodes[ i ];
|
|
|
+
|
|
|
+ if ( child.nodeType !== 1 ) continue;
|
|
|
+
|
|
|
+ switch ( child.nodeName ) {
|
|
|
+
|
|
|
+ case 'technique_common':
|
|
|
+ parsePhysicsTechniqueCommon( child, data );
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function parsePhysicsTechniqueCommon( xml, data ) {
|
|
|
+
|
|
|
+ for ( var i = 0; i < xml.childNodes.length; i ++ ) {
|
|
|
+
|
|
|
+ var child = xml.childNodes[ i ];
|
|
|
+
|
|
|
+ if ( child.nodeType !== 1 ) continue;
|
|
|
+
|
|
|
+ switch ( child.nodeName ) {
|
|
|
+
|
|
|
+ case 'inertia':
|
|
|
+ data.inertia = parseFloats( child.textContent );
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 'mass':
|
|
|
+ data.mass = parseFloats( child.textContent )[0];
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // scene
|
|
|
+
|
|
|
function parseKinematicsScene( xml ) {
|
|
|
|
|
|
var data = {
|
|
@@ -3282,7 +3358,7 @@ THREE.ColladaLoader.prototype = {
|
|
|
// and weights defined for it. But we still have to add the bone to the sorted bone list in order to
|
|
|
// ensure a correct animation of the model.
|
|
|
|
|
|
- boneInverse = new THREE.Matrix4();
|
|
|
+ boneInverse = new THREE.Matrix4();
|
|
|
|
|
|
}
|
|
|
|
|
@@ -3684,6 +3760,7 @@ THREE.ColladaLoader.prototype = {
|
|
|
nodes: {},
|
|
|
visualScenes: {},
|
|
|
kinematicsModels: {},
|
|
|
+ physicsModels: {},
|
|
|
kinematicsScenes: {}
|
|
|
};
|
|
|
|
|
@@ -3699,6 +3776,7 @@ THREE.ColladaLoader.prototype = {
|
|
|
parseLibrary( collada, 'library_nodes', 'node', parseNode );
|
|
|
parseLibrary( collada, 'library_visual_scenes', 'visual_scene', parseVisualScene );
|
|
|
parseLibrary( collada, 'library_kinematics_models', 'kinematics_model', parseKinematicsModel );
|
|
|
+ parseLibrary( collada, 'library_physics_models', 'physics_model', parsePhysicsModel );
|
|
|
parseLibrary( collada, 'scene', 'instance_kinematics_scene', parseKinematicsScene );
|
|
|
|
|
|
buildLibrary( library.animations, buildAnimation );
|