|
@@ -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
|