浏览代码

impulse and force applied relative to center of mass

Cedric Guillemet 5 年之前
父节点
当前提交
1b2ba87211
共有 1 个文件被更改,包括 4 次插入9 次删除
  1. 4 9
      src/Physics/Plugins/ammoJSPlugin.ts

+ 4 - 9
src/Physics/Plugins/ammoJSPlugin.ts

@@ -328,7 +328,6 @@ export class AmmoJSPlugin implements IPhysicsEnginePlugin {
         vertex_data.applyToMesh(<Mesh>object);
     }
 
-    private _tmpVector = new Vector3();
     private _tmpMatrix = new Matrix();
     /**
      * Applies an impulse on the imposter
@@ -342,11 +341,9 @@ export class AmmoJSPlugin implements IPhysicsEnginePlugin {
             var worldPoint = this._tmpAmmoVectorA;
             var impulse = this._tmpAmmoVectorB;
 
-            // Convert contactPoint into world space
+            // Convert contactPoint relative to body position
             if (impostor.object && impostor.object.getWorldMatrix) {
-                impostor.object.getWorldMatrix().invertToRef(this._tmpMatrix);
-                Vector3.TransformCoordinatesToRef(contactPoint, this._tmpMatrix, this._tmpVector);
-                contactPoint = this._tmpVector;
+                contactPoint.subtractInPlace(impostor.object.getWorldMatrix().getTranslation());
             }
 
             worldPoint.setValue(contactPoint.x, contactPoint.y, contactPoint.z);
@@ -371,11 +368,9 @@ export class AmmoJSPlugin implements IPhysicsEnginePlugin {
             var worldPoint = this._tmpAmmoVectorA;
             var impulse = this._tmpAmmoVectorB;
 
-            // Convert contactPoint into world space
+            // Convert contactPoint relative to body position
             if (impostor.object && impostor.object.getWorldMatrix) {
-                impostor.object.getWorldMatrix().invertToRef(this._tmpMatrix);
-                Vector3.TransformCoordinatesToRef(contactPoint, this._tmpMatrix, this._tmpVector);
-                contactPoint = this._tmpVector;
+                contactPoint.subtractInPlace(impostor.object.getWorldMatrix().getTranslation());
             }
 
             worldPoint.setValue(contactPoint.x, contactPoint.y, contactPoint.z);