|
@@ -57,9 +57,14 @@ THREE.MMDPhysics.prototype = {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- var currentPosition = mesh.position.clone();
|
|
|
|
- var currentRotation = mesh.rotation.clone();
|
|
|
|
- var currentScale = mesh.scale.clone();
|
|
|
|
|
|
+ var helper = this.helper;
|
|
|
|
+ var currentPosition = helper.allocThreeVector3();
|
|
|
|
+ var currentRotation = helper.allocThreeVector3();
|
|
|
|
+ var currentScale = helper.allocThreeVector3();
|
|
|
|
+
|
|
|
|
+ currentPosition.copy( mesh.position );
|
|
|
|
+ currentRotation.copy( mesh.rotation );
|
|
|
|
+ currentScale.copy( mesh.scale );
|
|
|
|
|
|
mesh.position.set( 0, 0, 0 );
|
|
mesh.position.set( 0, 0, 0 );
|
|
mesh.rotation.set( 0, 0, 0 );
|
|
mesh.rotation.set( 0, 0, 0 );
|
|
@@ -85,6 +90,10 @@ THREE.MMDPhysics.prototype = {
|
|
|
|
|
|
this.reset();
|
|
this.reset();
|
|
|
|
|
|
|
|
+ helper.freeThreeVector3( currentPosition );
|
|
|
|
+ helper.freeThreeVector3( currentRotation );
|
|
|
|
+ helper.freeThreeVector3( currentScale );
|
|
|
|
+
|
|
},
|
|
},
|
|
|
|
|
|
initWorld: function () {
|
|
initWorld: function () {
|
|
@@ -374,34 +383,35 @@ THREE.MMDPhysics.ResourceHelper.prototype = {
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
+ setOriginFromThreeVector3: function ( t, v ) {
|
|
|
|
+
|
|
|
|
+ t.getOrigin().setValue( v.x, v.y, v.z );
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+
|
|
setBasisFromArray3: function ( t, a ) {
|
|
setBasisFromArray3: function ( t, a ) {
|
|
|
|
|
|
var thQ = this.allocThreeQuaternion();
|
|
var thQ = this.allocThreeQuaternion();
|
|
var thE = this.allocThreeEuler();
|
|
var thE = this.allocThreeEuler();
|
|
thE.set( a[ 0 ], a[ 1 ], a[ 2 ] );
|
|
thE.set( a[ 0 ], a[ 1 ], a[ 2 ] );
|
|
- this.setBasisFromArray4( t, thQ.setFromEuler( thE ).toArray() );
|
|
|
|
|
|
+ this.setBasisFromThreeQuaternion( t, thQ.setFromEuler( thE ) );
|
|
|
|
|
|
this.freeThreeEuler( thE );
|
|
this.freeThreeEuler( thE );
|
|
this.freeThreeQuaternion( thQ );
|
|
this.freeThreeQuaternion( thQ );
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- setBasisFromArray4: function ( t, a ) {
|
|
|
|
|
|
+ setBasisFromThreeQuaternion: function ( t, a ) {
|
|
|
|
|
|
- var q = this.array4ToQuaternion( a );
|
|
|
|
- this.setBasis( t, q );
|
|
|
|
- this.freeQuaternion( q );
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
|
|
+ var q = this.allocQuaternion();
|
|
|
|
|
|
- array4ToQuaternion: function( a ) {
|
|
|
|
|
|
+ q.setX( a.x );
|
|
|
|
+ q.setY( a.y );
|
|
|
|
+ q.setZ( a.z );
|
|
|
|
+ q.setW( a.w );
|
|
|
|
+ this.setBasis( t, q );
|
|
|
|
|
|
- var q = this.allocQuaternion();
|
|
|
|
- q.setX( a[ 0 ] );
|
|
|
|
- q.setY( a[ 1 ] );
|
|
|
|
- q.setZ( a[ 2 ] );
|
|
|
|
- q.setW( a[ 3 ] );
|
|
|
|
- return q;
|
|
|
|
|
|
+ this.freeQuaternion( q );
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
@@ -707,9 +717,10 @@ THREE.MMDPhysics.RigidBody.prototype = {
|
|
helper.setOriginFromArray3( boneOffsetForm, params.position );
|
|
helper.setOriginFromArray3( boneOffsetForm, params.position );
|
|
helper.setBasisFromArray3( boneOffsetForm, params.rotation );
|
|
helper.setBasisFromArray3( boneOffsetForm, params.rotation );
|
|
|
|
|
|
|
|
+ var vector = helper.allocThreeVector3();
|
|
var boneForm = helper.allocTransform();
|
|
var boneForm = helper.allocTransform();
|
|
helper.setIdentity( boneForm );
|
|
helper.setIdentity( boneForm );
|
|
- helper.setOriginFromArray3( boneForm, bone.getWorldPosition().toArray() );
|
|
|
|
|
|
+ helper.setOriginFromThreeVector3( boneForm, bone.getWorldPosition( vector ) );
|
|
|
|
|
|
var form = helper.multiplyTransforms( boneForm, boneOffsetForm );
|
|
var form = helper.multiplyTransforms( boneForm, boneOffsetForm );
|
|
var state = new Ammo.btDefaultMotionState( form );
|
|
var state = new Ammo.btDefaultMotionState( form );
|
|
@@ -746,6 +757,7 @@ THREE.MMDPhysics.RigidBody.prototype = {
|
|
helper.freeVector3( localInertia );
|
|
helper.freeVector3( localInertia );
|
|
helper.freeTransform( form );
|
|
helper.freeTransform( form );
|
|
helper.freeTransform( boneForm );
|
|
helper.freeTransform( boneForm );
|
|
|
|
+ helper.freeThreeVector3( vector );
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
@@ -800,16 +812,21 @@ THREE.MMDPhysics.RigidBody.prototype = {
|
|
getBoneTransform: function () {
|
|
getBoneTransform: function () {
|
|
|
|
|
|
var helper = this.helper;
|
|
var helper = this.helper;
|
|
- var p = this.bone.getWorldPosition();
|
|
|
|
- var q = this.bone.getWorldQuaternion();
|
|
|
|
|
|
+ var p = helper.allocThreeVector3();
|
|
|
|
+ var q = helper.allocThreeQuaternion();
|
|
|
|
+
|
|
|
|
+ this.bone.getWorldPosition( p );
|
|
|
|
+ this.bone.getWorldQuaternion( q );
|
|
|
|
|
|
var tr = helper.allocTransform();
|
|
var tr = helper.allocTransform();
|
|
- helper.setOriginFromArray3( tr, p.toArray() );
|
|
|
|
- helper.setBasisFromArray4( tr, q.toArray() );
|
|
|
|
|
|
+ helper.setOriginFromThreeVector3( tr, p );
|
|
|
|
+ helper.setBasisFromThreeQuaternion( tr, q );
|
|
|
|
|
|
var form = helper.multiplyTransforms( tr, this.boneOffsetForm );
|
|
var form = helper.multiplyTransforms( tr, this.boneOffsetForm );
|
|
|
|
|
|
helper.freeTransform( tr );
|
|
helper.freeTransform( tr );
|
|
|
|
+ helper.freeThreeQuaternion( q );
|
|
|
|
+ helper.freeThreeVector3( p );
|
|
|
|
|
|
return form;
|
|
return form;
|
|
|
|
|
|
@@ -1114,7 +1131,7 @@ THREE.MMDPhysicsHelper.prototype._init = function () {
|
|
return new THREE.SphereBufferGeometry( param.width, 16, 8 );
|
|
return new THREE.SphereBufferGeometry( param.width, 16, 8 );
|
|
|
|
|
|
case 1:
|
|
case 1:
|
|
- return new THREE.BoxBufferGeometry( param.width * 2, param.height * 2, param.depth * 2, 8, 8, 8);
|
|
|
|
|
|
+ return new THREE.BoxBufferGeometry( param.width * 2, param.height * 2, param.depth * 2, 8, 8, 8 );
|
|
|
|
|
|
case 2:
|
|
case 2:
|
|
return new createCapsuleGeometry( param.width, param.height, 16, 8 );
|
|
return new createCapsuleGeometry( param.width, param.height, 16, 8 );
|