提交 6a8a18ee 编写于 作者: M Mr.doob 提交者: GitHub

Merge pull request #12160 from ferrolho/dev

Improves support for collada models with non-integer joint indices
......@@ -2176,7 +2176,7 @@ THREE.ColladaLoader.prototype = {
var data = {
name: xml.getAttribute( 'name' ) || '',
joints: [],
joints: {},
links: []
};
......@@ -2225,7 +2225,7 @@ THREE.ColladaLoader.prototype = {
switch ( child.nodeName ) {
case 'joint':
data.joints.push( parseKinematicsJoint( child ) );
data.joints[ child.getAttribute( 'sid' ) ] = parseKinematicsJoint( child );
break;
case 'link':
......@@ -2463,7 +2463,8 @@ THREE.ColladaLoader.prototype = {
case 'axis':
var param = child.getElementsByTagName( 'param' )[ 0 ];
data.axis = param.textContent;
data.jointIndex = parseInt( data.axis.split( 'joint' ).pop().split( '.' )[ 0 ] );
var tmpJointIndex = data.axis.split( 'inst_' ).pop().split( 'axis' )[ 0 ];
data.jointIndex = tmpJointIndex.substr( 0, tmpJointIndex.length - 1 );
break;
}
......@@ -2602,7 +2603,7 @@ THREE.ColladaLoader.prototype = {
// if there is a connection of the transform node with a joint, apply the joint value
if ( transform.sid && transform.sid.indexOf( 'joint' + jointIndex ) !== -1 ) {
if ( transform.sid && transform.sid.indexOf( jointIndex ) !== -1 ) {
switch ( joint.type ) {
......
此差异已折叠。
......@@ -58,7 +58,8 @@
var loader = new THREE.ColladaLoader();
loader.options.convertUpAxis = true;
loader.load( './models/collada/kawada-hironx.dae', function ( collada ) {
// loader.load( './models/collada/kawada-hironx.dae', function ( collada ) {
loader.load( './models/collada/abb_irb52_7_120.dae', function ( collada ) {
dae = collada.scene;
......@@ -135,17 +136,25 @@
var target = {};
for ( var i = 0; i < kinematics.joints.length; i ++ ) {
for ( var prop in kinematics.joints ) {
var joint = kinematics.joints[ i ];
if ( kinematics.joints.hasOwnProperty( prop ) ) {
var old = tweenParameters[ i ];
if ( ! kinematics.joints[ prop ].static ) {
var position = old ? old : joint.zeroPosition;
var joint = kinematics.joints[ prop ];
tweenParameters[ i ] = position;
var old = tweenParameters[ prop ];
target[ i ] = THREE.Math.randInt( joint.limits.min, joint.limits.max )
var position = old ? old : joint.zeroPosition;
tweenParameters[ prop ] = position;
target[ prop ] = THREE.Math.randInt( joint.limits.min, joint.limits.max )
}
}
}
......@@ -153,9 +162,17 @@
kinematicsTween.onUpdate( function() {
for ( var i = 0; i < kinematics.joints.length; i ++ ) {
for ( var prop in kinematics.joints ) {
if ( kinematics.joints.hasOwnProperty( prop ) ) {
if ( ! kinematics.joints[ prop ].static ) {
kinematics.setJointValue( prop, this[ prop ] );
}
kinematics.setJointValue( i, this[ i ] );
}
}
......@@ -192,11 +209,11 @@
var timer = Date.now() * 0.0001;
camera.position.x = Math.cos( timer ) * 17;
camera.position.x = Math.cos( timer ) * 20;
camera.position.y = 10;
camera.position.z = Math.sin( timer ) * 17;
camera.position.z = Math.sin( timer ) * 20;
camera.lookAt( scene.position );
camera.lookAt( new THREE.Vector3( 0, 5, 0 ) );
particleLight.position.x = Math.sin( timer * 4 ) * 3009;
particleLight.position.y = Math.cos( timer * 5 ) * 4000;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册