Browse Source

moving lookAt to be prior to cache update per PR review

Delaney Gillilan 6 years ago
parent
commit
45f4cdf113
1 changed files with 24 additions and 21 deletions
  1. 24 21
      src/Meshes/transformNode.ts

+ 24 - 21
src/Meshes/transformNode.ts

@@ -946,6 +946,27 @@ export class TransformNode extends Node {
             return this._worldMatrix;
         }
 
+        let camera = (<Camera>this.getScene().activeCamera);
+        const useBillboardPath = this._billboardMode !== TransformNode.BILLBOARDMODE_NONE && !this.preserveParentRotationForBillboard;
+        const useBillboardPosition = this._billboardMode & TransformNode.BILLBOARDMODE_USE_POSITION;
+
+        // Billboarding based on camera position
+        if (useBillboardPath && camera && useBillboardPosition) {
+            this.lookAt(camera.position);
+
+            if ((this.billboardMode & TransformNode.BILLBOARDMODE_X) !== TransformNode.BILLBOARDMODE_X) {
+                this.rotation.x = 0;
+            }
+
+            if ((this.billboardMode & TransformNode.BILLBOARDMODE_Y) !== TransformNode.BILLBOARDMODE_Y) {
+                this.rotation.y = 0;
+            }
+
+            if ((this.billboardMode & TransformNode.BILLBOARDMODE_Z) !== TransformNode.BILLBOARDMODE_Z) {
+                this.rotation.z = 0;
+            }
+        }
+
         this._updateCache();
         let cache = this._cache;
         cache.pivotMatrixUpdated = false;
@@ -956,8 +977,6 @@ export class TransformNode extends Node {
         this._childUpdateId++;
         this._isDirty = false;
         let parent = this._getEffectiveParent();
-        const useBillboardPath = this._billboardMode !== TransformNode.BILLBOARDMODE_NONE && !this.preserveParentRotationForBillboard;
-        let camera = (<Camera>this.getScene().activeCamera);
 
         // Scaling
         let scaling: Vector3 = cache.scaling;
@@ -1052,24 +1071,9 @@ export class TransformNode extends Node {
             this._worldMatrix.copyFrom(this._localMatrix);
         }
 
-        // Billboarding (testing PG:http://www.babylonjs-playground.com/#UJEIL#13)
-        if (useBillboardPath && camera) {
-            if (this.billboardMode & TransformNode.BILLBOARDMODE_USE_POSITION) {
-                this.lookAt(camera.position);
-
-                if ((this.billboardMode & TransformNode.BILLBOARDMODE_X) !== TransformNode.BILLBOARDMODE_X) {
-                    this.rotation.x = 0;
-                }
-
-                if ((this.billboardMode & TransformNode.BILLBOARDMODE_Y) !== TransformNode.BILLBOARDMODE_Y) {
-                    this.rotation.y = 0;
-                }
-
-                if ((this.billboardMode & TransformNode.BILLBOARDMODE_Z) !== TransformNode.BILLBOARDMODE_Z) {
-                    this.rotation.z = 0;
-                }
-            } else {
-                let storedTranslation = TmpVectors.Vector3[0];
+        // Billboarding based on camera orientation (testing PG:http://www.babylonjs-playground.com/#UJEIL#13)
+        if (useBillboardPath && camera && this.billboardMode && !useBillboardPosition) {
+            let storedTranslation = TmpVectors.Vector3[0];
                 this._worldMatrix.getTranslationToRef(storedTranslation); // Save translation
 
                 // Cancel camera rotation
@@ -1101,7 +1105,6 @@ export class TransformNode extends Node {
 
                 // Restore translation
                 this._worldMatrix.setTranslation(TmpVectors.Vector3[0]);
-            }
         }
 
         // Normal matrix