未验证 提交 f36c9c59 编写于 作者: M Mr.doob 提交者: GitHub

Merge pull request #13885 from ferrolho/dev

Adds physics model parser to ColladaLoader.js
......@@ -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 );
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册