Quellcode durchsuchen

Adding panning support to ArcRotateCamera

David Catuhe vor 10 Jahren
Ursprung
Commit
9d1fff6fcc

Datei-Diff unterdrückt, da er zu groß ist
+ 22 - 24
dist/preview release - alpha/babylon.2.2.js


+ 52 - 11
dist/preview release - alpha/babylon.2.2.max.js

@@ -10782,6 +10782,9 @@ var BABYLON;
             this.allowUpsideDown = true;
             this._keys = [];
             this._viewMatrix = new BABYLON.Matrix();
+            this._isRightClick = false;
+            this._isCtrlPushed = false;
+            this._lastPanningPosition = new BABYLON.Vector2(0, 0);
             this.checkCollisions = false;
             this.collisionRadius = new BABYLON.Vector3(0.5, 0.5, 0.5);
             this._collider = new BABYLON.Collider();
@@ -10858,8 +10861,9 @@ var BABYLON;
                 && this._cache.targetScreenOffset.equals(this.targetScreenOffset);
         };
         // Methods
-        ArcRotateCamera.prototype.attachControl = function (element, noPreventDefault) {
+        ArcRotateCamera.prototype.attachControl = function (element, noPreventDefault, useCtrlForPanning) {
             var _this = this;
+            if (useCtrlForPanning === void 0) { useCtrlForPanning = true; }
             var cacheSoloPointer; // cache pointer object for better perf on camera rotation
             var previousPinchDistance = 0;
             var pointers = new BABYLON.SmartCollection();
@@ -10870,6 +10874,11 @@ var BABYLON;
             var engine = this.getEngine();
             if (this._onPointerDown === undefined) {
                 this._onPointerDown = function (evt) {
+                    // Manage panning
+                    _this._isRightClick = evt.button === 2 ? true : false;
+                    _this._lastPanningPosition.x = evt.clientX;
+                    _this._lastPanningPosition.y = evt.clientY;
+                    // manage pointers
                     pointers.add(evt.pointerId, { x: evt.clientX, y: evt.clientY, type: evt.pointerType });
                     cacheSoloPointer = pointers.item(evt.pointerId);
                     if (!noPreventDefault) {
@@ -10888,18 +10897,37 @@ var BABYLON;
                         evt.preventDefault();
                     }
                 };
+                this._onContextMenu = function (evt) {
+                    evt.preventDefault();
+                };
                 this._onPointerMove = function (evt) {
                     if (!noPreventDefault) {
                         evt.preventDefault();
                     }
                     switch (pointers.count) {
                         case 1:
-                            var offsetX = evt.clientX - cacheSoloPointer.x;
-                            var offsetY = evt.clientY - cacheSoloPointer.y;
-                            _this.inertialAlphaOffset -= offsetX / _this.angularSensibility;
-                            _this.inertialBetaOffset -= offsetY / _this.angularSensibility;
-                            cacheSoloPointer.x = evt.clientX;
-                            cacheSoloPointer.y = evt.clientY;
+                            if ((_this._isCtrlPushed && useCtrlForPanning) || (!useCtrlForPanning && _this._isRightClick)) {
+                                if (!_this._localDirection) {
+                                    _this._localDirection = BABYLON.Vector3.Zero();
+                                    _this._transformedDirection = BABYLON.Vector3.Zero();
+                                }
+                                var diffx = (evt.clientX - _this._lastPanningPosition.x) * 0.1;
+                                var diffy = (evt.clientY - _this._lastPanningPosition.y) * 0.1;
+                                _this._localDirection.copyFromFloats(-diffx, diffy, 0);
+                                _this._viewMatrix.invertToRef(_this._cameraTransformMatrix);
+                                BABYLON.Vector3.TransformNormalToRef(_this._localDirection, _this._cameraTransformMatrix, _this._transformedDirection);
+                                _this.target.addInPlace(_this._transformedDirection);
+                                _this._lastPanningPosition.x = evt.clientX;
+                                _this._lastPanningPosition.y = evt.clientY;
+                            }
+                            else {
+                                var offsetX = evt.clientX - cacheSoloPointer.x;
+                                var offsetY = evt.clientY - cacheSoloPointer.y;
+                                _this.inertialAlphaOffset -= offsetX / _this.angularSensibility;
+                                _this.inertialBetaOffset -= offsetY / _this.angularSensibility;
+                                cacheSoloPointer.x = evt.clientX;
+                                cacheSoloPointer.y = evt.clientY;
+                            }
                             break;
                         case 2:
                             //if (noPreventDefault) { evt.preventDefault(); } //if pinch gesture, could be usefull to force preventDefault to avoid html page scroll/zoom in some mobile browsers
@@ -10954,6 +10982,7 @@ var BABYLON;
                     }
                 };
                 this._onKeyDown = function (evt) {
+                    _this._isCtrlPushed = evt.ctrlKey;
                     if (_this.keysUp.indexOf(evt.keyCode) !== -1 ||
                         _this.keysDown.indexOf(evt.keyCode) !== -1 ||
                         _this.keysLeft.indexOf(evt.keyCode) !== -1 ||
@@ -10970,6 +10999,7 @@ var BABYLON;
                     }
                 };
                 this._onKeyUp = function (evt) {
+                    _this._isCtrlPushed = evt.ctrlKey;
                     if (_this.keysUp.indexOf(evt.keyCode) !== -1 ||
                         _this.keysDown.indexOf(evt.keyCode) !== -1 ||
                         _this.keysLeft.indexOf(evt.keyCode) !== -1 ||
@@ -11020,6 +11050,9 @@ var BABYLON;
                     cacheSoloPointer = null;
                 };
             }
+            if (!useCtrlForPanning) {
+                element.addEventListener("contextmenu", this._onContextMenu, false);
+            }
             element.addEventListener(eventPrefix + "down", this._onPointerDown, false);
             element.addEventListener(eventPrefix + "up", this._onPointerUp, false);
             element.addEventListener(eventPrefix + "out", this._onPointerUp, false);
@@ -11039,6 +11072,7 @@ var BABYLON;
             if (this._attachedElement !== element) {
                 return;
             }
+            element.removeEventListener("contextmenu", this._onContextMenu);
             element.removeEventListener(eventPrefix + "down", this._onPointerDown);
             element.removeEventListener(eventPrefix + "up", this._onPointerUp);
             element.removeEventListener(eventPrefix + "out", this._onPointerUp);
@@ -11231,7 +11265,7 @@ var BABYLON;
             _super.prototype._updateRigCameras.call(this);
         };
         return ArcRotateCamera;
-    })(BABYLON.Camera);
+    })(BABYLON.TargetCamera);
     BABYLON.ArcRotateCamera = ArcRotateCamera;
 })(BABYLON || (BABYLON = {}));
 //# sourceMappingURL=babylon.arcRotateCamera.js.map
@@ -12017,7 +12051,7 @@ var BABYLON;
                 for (subIndex = 0; subIndex < this._transparentSubMeshes.length; subIndex++) {
                     submesh = this._transparentSubMeshes.data[subIndex];
                     submesh._alphaIndex = submesh.getMesh().alphaIndex;
-                    submesh._distanceToCamera = submesh.getBoundingInfo().boundingSphere.centerWorld.subtract(this._scene.activeCamera.position).length();
+                    submesh._distanceToCamera = submesh.getBoundingInfo().boundingSphere.centerWorld.subtract(this._scene.activeCamera.globalPosition).length();
                 }
                 var sortedArray = this._transparentSubMeshes.data.slice(0, this._transparentSubMeshes.length);
                 sortedArray.sort(function (a, b) {
@@ -17991,6 +18025,9 @@ var BABYLON;
         };
         Material.prototype.unbind = function () {
         };
+        Material.prototype.clone = function (name) {
+            return null;
+        };
         Material.prototype.dispose = function (forceDisposeEffect) {
             // Remove from scene
             var index = this._scene.materials.indexOf(this);
@@ -24934,6 +24971,10 @@ var BABYLON;
             }
             _super.prototype.bind.call(this, world, mesh);
         };
+        ShaderMaterial.prototype.clone = function (name) {
+            var newShaderMaterial = new ShaderMaterial(name, this.getScene(), this._shaderPath, this._options);
+            return newShaderMaterial;
+        };
         ShaderMaterial.prototype.dispose = function (forceDisposeEffect) {
             for (var name in this._textures) {
                 this._textures[name].dispose();
@@ -32031,12 +32072,12 @@ var BABYLON;
             */
             this.maximumLuminance = 1e20;
             /**
-            * Increase rate for luminance: eye adaptation speed to bright
+            * Increase rate for luminance: eye adaptation speed to dark
             * @type {number}
             */
             this.luminanceIncreaserate = 0.5;
             /**
-            * Decrease rate for luminance: eye adaptation speed to dark
+            * Decrease rate for luminance: eye adaptation speed to bright
             * @type {number}
             */
             this.luminanceDecreaseRate = 0.5;

Datei-Diff unterdrückt, da er zu groß ist
+ 22 - 24
dist/preview release - alpha/babylon.2.2.noworker.js


+ 1 - 0
dist/preview release - alpha/what's new.md

@@ -3,6 +3,7 @@
     - Meshes can now be attached to bones. See [documentation here](http://babylondoc.azurewebsites.net/page.php?p=22421) and [sample here](http://www.babylonjs-playground.com/#11BH6Z#18) [deltakosh](https://github.com/deltakosh)
     - HDR Rendering pipeline. See [demo here]() [julien-moreau](https://github.com/julien-moreau)
   - **Updates**
+    - Panning support for ArcRotateCamera [julien-moreau](https://github.com/julien-moreau)
     - Vertex color and diffuse color can now be mixed [deltakosh](https://github.com/deltakosh)
     - Depth-of-field improvements [PR](https://github.com/BabylonJS/Babylon.js/pull/567) [jahow](https://github.com/jahow)
     - Engine now initialize WebGL with preserveDrawingBuffer = false by default [deltakosh](https://github.com/deltakosh)

+ 42 - 8
src/Cameras/babylon.arcRotateCamera.js

@@ -38,6 +38,9 @@ var BABYLON;
             this.allowUpsideDown = true;
             this._keys = [];
             this._viewMatrix = new BABYLON.Matrix();
+            this._isRightClick = false;
+            this._isCtrlPushed = false;
+            this._lastPanningPosition = new BABYLON.Vector2(0, 0);
             this.checkCollisions = false;
             this.collisionRadius = new BABYLON.Vector3(0.5, 0.5, 0.5);
             this._collider = new BABYLON.Collider();
@@ -114,8 +117,9 @@ var BABYLON;
                 && this._cache.targetScreenOffset.equals(this.targetScreenOffset);
         };
         // Methods
-        ArcRotateCamera.prototype.attachControl = function (element, noPreventDefault) {
+        ArcRotateCamera.prototype.attachControl = function (element, noPreventDefault, useCtrlForPanning) {
             var _this = this;
+            if (useCtrlForPanning === void 0) { useCtrlForPanning = true; }
             var cacheSoloPointer; // cache pointer object for better perf on camera rotation
             var previousPinchDistance = 0;
             var pointers = new BABYLON.SmartCollection();
@@ -126,6 +130,11 @@ var BABYLON;
             var engine = this.getEngine();
             if (this._onPointerDown === undefined) {
                 this._onPointerDown = function (evt) {
+                    // Manage panning
+                    _this._isRightClick = evt.button === 2 ? true : false;
+                    _this._lastPanningPosition.x = evt.clientX;
+                    _this._lastPanningPosition.y = evt.clientY;
+                    // manage pointers
                     pointers.add(evt.pointerId, { x: evt.clientX, y: evt.clientY, type: evt.pointerType });
                     cacheSoloPointer = pointers.item(evt.pointerId);
                     if (!noPreventDefault) {
@@ -144,18 +153,37 @@ var BABYLON;
                         evt.preventDefault();
                     }
                 };
+                this._onContextMenu = function (evt) {
+                    evt.preventDefault();
+                };
                 this._onPointerMove = function (evt) {
                     if (!noPreventDefault) {
                         evt.preventDefault();
                     }
                     switch (pointers.count) {
                         case 1:
-                            var offsetX = evt.clientX - cacheSoloPointer.x;
-                            var offsetY = evt.clientY - cacheSoloPointer.y;
-                            _this.inertialAlphaOffset -= offsetX / _this.angularSensibility;
-                            _this.inertialBetaOffset -= offsetY / _this.angularSensibility;
-                            cacheSoloPointer.x = evt.clientX;
-                            cacheSoloPointer.y = evt.clientY;
+                            if ((_this._isCtrlPushed && useCtrlForPanning) || (!useCtrlForPanning && _this._isRightClick)) {
+                                if (!_this._localDirection) {
+                                    _this._localDirection = BABYLON.Vector3.Zero();
+                                    _this._transformedDirection = BABYLON.Vector3.Zero();
+                                }
+                                var diffx = (evt.clientX - _this._lastPanningPosition.x) * 0.1;
+                                var diffy = (evt.clientY - _this._lastPanningPosition.y) * 0.1;
+                                _this._localDirection.copyFromFloats(-diffx, diffy, 0);
+                                _this._viewMatrix.invertToRef(_this._cameraTransformMatrix);
+                                BABYLON.Vector3.TransformNormalToRef(_this._localDirection, _this._cameraTransformMatrix, _this._transformedDirection);
+                                _this.target.addInPlace(_this._transformedDirection);
+                                _this._lastPanningPosition.x = evt.clientX;
+                                _this._lastPanningPosition.y = evt.clientY;
+                            }
+                            else {
+                                var offsetX = evt.clientX - cacheSoloPointer.x;
+                                var offsetY = evt.clientY - cacheSoloPointer.y;
+                                _this.inertialAlphaOffset -= offsetX / _this.angularSensibility;
+                                _this.inertialBetaOffset -= offsetY / _this.angularSensibility;
+                                cacheSoloPointer.x = evt.clientX;
+                                cacheSoloPointer.y = evt.clientY;
+                            }
                             break;
                         case 2:
                             //if (noPreventDefault) { evt.preventDefault(); } //if pinch gesture, could be usefull to force preventDefault to avoid html page scroll/zoom in some mobile browsers
@@ -210,6 +238,7 @@ var BABYLON;
                     }
                 };
                 this._onKeyDown = function (evt) {
+                    _this._isCtrlPushed = evt.ctrlKey;
                     if (_this.keysUp.indexOf(evt.keyCode) !== -1 ||
                         _this.keysDown.indexOf(evt.keyCode) !== -1 ||
                         _this.keysLeft.indexOf(evt.keyCode) !== -1 ||
@@ -226,6 +255,7 @@ var BABYLON;
                     }
                 };
                 this._onKeyUp = function (evt) {
+                    _this._isCtrlPushed = evt.ctrlKey;
                     if (_this.keysUp.indexOf(evt.keyCode) !== -1 ||
                         _this.keysDown.indexOf(evt.keyCode) !== -1 ||
                         _this.keysLeft.indexOf(evt.keyCode) !== -1 ||
@@ -276,6 +306,9 @@ var BABYLON;
                     cacheSoloPointer = null;
                 };
             }
+            if (!useCtrlForPanning) {
+                element.addEventListener("contextmenu", this._onContextMenu, false);
+            }
             element.addEventListener(eventPrefix + "down", this._onPointerDown, false);
             element.addEventListener(eventPrefix + "up", this._onPointerUp, false);
             element.addEventListener(eventPrefix + "out", this._onPointerUp, false);
@@ -295,6 +328,7 @@ var BABYLON;
             if (this._attachedElement !== element) {
                 return;
             }
+            element.removeEventListener("contextmenu", this._onContextMenu);
             element.removeEventListener(eventPrefix + "down", this._onPointerDown);
             element.removeEventListener(eventPrefix + "up", this._onPointerUp);
             element.removeEventListener(eventPrefix + "out", this._onPointerUp);
@@ -487,7 +521,7 @@ var BABYLON;
             _super.prototype._updateRigCameras.call(this);
         };
         return ArcRotateCamera;
-    })(BABYLON.Camera);
+    })(BABYLON.TargetCamera);
     BABYLON.ArcRotateCamera = ArcRotateCamera;
 })(BABYLON || (BABYLON = {}));
 //# sourceMappingURL=babylon.arcRotateCamera.js.map

+ 53 - 10
src/Cameras/babylon.arcRotateCamera.ts

@@ -1,7 +1,7 @@
 module BABYLON {
     var eventPrefix = Tools.GetPointerPrefix();
 
-    export class ArcRotateCamera extends Camera {
+    export class ArcRotateCamera extends TargetCamera {
         public inertialAlphaOffset = 0;
         public inertialBetaOffset = 0;
         public inertialRadiusOffset = 0;
@@ -24,9 +24,10 @@
         public allowUpsideDown = true;
 
         private _keys = [];
-        private _viewMatrix = new Matrix();
+        public _viewMatrix = new Matrix();
         private _attachedElement: HTMLElement;
 
+        private _onContextMenu: (e: PointerEvent) => void;
         private _onPointerDown: (e: PointerEvent) => void;
         private _onPointerUp: (e: PointerEvent) => void;
         private _onPointerMove: (e: PointerEvent) => void;
@@ -35,11 +36,18 @@
         private _onKeyDown: (e: KeyboardEvent) => any;
         private _onKeyUp: (e: KeyboardEvent) => any;
         private _onLostFocus: (e: FocusEvent) => any;
-        private _reset: () => void;
+        public _reset: () => void;
         private _onGestureStart: (e: PointerEvent) => void;
         private _onGesture: (e: MSGestureEvent) => void;
         private _MSGestureHandler: MSGesture;
 
+        // Panning
+        private _localDirection: Vector3;
+        private _transformedDirection: Vector3;
+        private _isRightClick: boolean = false;
+        private _isCtrlPushed: boolean = false;
+        private _lastPanningPosition: Vector2 = new Vector2(0, 0);
+
         // Collisions
         public onCollide: (collidedMesh: AbstractMesh) => void;
         public checkCollisions = false;
@@ -103,7 +111,7 @@
         }
 
         // Methods
-        public attachControl(element: HTMLElement, noPreventDefault?: boolean): void {
+        public attachControl(element: HTMLElement, noPreventDefault?: boolean, useCtrlForPanning: boolean = true): void {
             var cacheSoloPointer; // cache pointer object for better perf on camera rotation
             var previousPinchDistance = 0;
             var pointers = new SmartCollection();
@@ -117,6 +125,12 @@
 
             if (this._onPointerDown === undefined) {
                 this._onPointerDown = evt => {
+                    // Manage panning
+                    this._isRightClick = evt.button === 2 ? true : false;
+                    this._lastPanningPosition.x = evt.clientX;
+                    this._lastPanningPosition.y = evt.clientY;
+
+                    // manage pointers
                     pointers.add(evt.pointerId, { x: evt.clientX, y: evt.clientY, type: evt.pointerType });
                     cacheSoloPointer = pointers.item(evt.pointerId);
                     if (!noPreventDefault) {
@@ -139,6 +153,10 @@
                     }
                 };
 
+                this._onContextMenu = evt => {
+                    evt.preventDefault();
+                };
+
                 this._onPointerMove = evt => {
                     if (!noPreventDefault) {
                         evt.preventDefault();
@@ -147,12 +165,31 @@
                     switch (pointers.count) {
 
                         case 1: //normal camera rotation
-                            var offsetX = evt.clientX - cacheSoloPointer.x;
-                            var offsetY = evt.clientY - cacheSoloPointer.y;
-                            this.inertialAlphaOffset -= offsetX / this.angularSensibility;
-                            this.inertialBetaOffset -= offsetY / this.angularSensibility;
-                            cacheSoloPointer.x = evt.clientX;
-                            cacheSoloPointer.y = evt.clientY;
+                            if ((this._isCtrlPushed && useCtrlForPanning) || (!useCtrlForPanning && this._isRightClick)) {
+                                if (!this._localDirection) {
+                                    this._localDirection = Vector3.Zero();
+                                    this._transformedDirection = Vector3.Zero();
+                                }
+
+                                var diffx = (evt.clientX - this._lastPanningPosition.x) * 0.1;
+                                var diffy = (evt.clientY - this._lastPanningPosition.y) * 0.1;
+
+                                this._localDirection.copyFromFloats(-diffx, diffy, 0);
+                                this._viewMatrix.invertToRef(this._cameraTransformMatrix);
+                                Vector3.TransformNormalToRef(this._localDirection, this._cameraTransformMatrix, this._transformedDirection);
+                                this.target.addInPlace(this._transformedDirection);
+
+                                this._lastPanningPosition.x = evt.clientX;
+                                this._lastPanningPosition.y = evt.clientY;
+
+                            } else {
+                                var offsetX = evt.clientX - cacheSoloPointer.x;
+                                var offsetY = evt.clientY - cacheSoloPointer.y;
+                                this.inertialAlphaOffset -= offsetX / this.angularSensibility;
+                                this.inertialBetaOffset -= offsetY / this.angularSensibility;
+                                cacheSoloPointer.x = evt.clientX;
+                                cacheSoloPointer.y = evt.clientY;
+                            }
                             break;
 
                         case 2: //pinch
@@ -217,6 +254,7 @@
                 };
 
                 this._onKeyDown = evt => {
+                    this._isCtrlPushed = evt.ctrlKey;
                     if (this.keysUp.indexOf(evt.keyCode) !== -1 ||
                         this.keysDown.indexOf(evt.keyCode) !== -1 ||
                         this.keysLeft.indexOf(evt.keyCode) !== -1 ||
@@ -236,6 +274,7 @@
                 };
 
                 this._onKeyUp = evt => {
+                    this._isCtrlPushed = evt.ctrlKey;
                     if (this.keysUp.indexOf(evt.keyCode) !== -1 ||
                         this.keysDown.indexOf(evt.keyCode) !== -1 ||
                         this.keysLeft.indexOf(evt.keyCode) !== -1 ||
@@ -299,6 +338,9 @@
 
             }
 
+            if (!useCtrlForPanning) {
+                element.addEventListener("contextmenu", this._onContextMenu, false);
+            }
             element.addEventListener(eventPrefix + "down", this._onPointerDown, false);
             element.addEventListener(eventPrefix + "up", this._onPointerUp, false);
             element.addEventListener(eventPrefix + "out", this._onPointerUp, false);
@@ -321,6 +363,7 @@
                 return;
             }
 
+            element.removeEventListener("contextmenu", this._onContextMenu);
             element.removeEventListener(eventPrefix + "down", this._onPointerDown);
             element.removeEventListener(eventPrefix + "up", this._onPointerUp);
             element.removeEventListener(eventPrefix + "out", this._onPointerUp);

+ 3 - 0
src/Materials/babylon.material.js

@@ -104,6 +104,9 @@ var BABYLON;
         };
         Material.prototype.unbind = function () {
         };
+        Material.prototype.clone = function (name) {
+            return null;
+        };
         Material.prototype.dispose = function (forceDisposeEffect) {
             // Remove from scene
             var index = this._scene.materials.indexOf(this);

+ 4 - 0
src/Materials/babylon.material.ts

@@ -119,6 +119,10 @@
         public unbind(): void {
         }
 
+        public clone(name: string): Material {
+            return null;
+        }
+
         public dispose(forceDisposeEffect?: boolean): void {
             // Remove from scene
             var index = this._scene.materials.indexOf(this);

+ 0 - 1
src/Materials/babylon.multiMaterial.ts

@@ -31,7 +31,6 @@
             return true;
         }
 
-
         public clone(name: string): MultiMaterial {
             var newMultiMaterial = new MultiMaterial(name, this.getScene());
 

+ 4 - 0
src/Materials/babylon.shaderMaterial.js

@@ -183,6 +183,10 @@ var BABYLON;
             }
             _super.prototype.bind.call(this, world, mesh);
         };
+        ShaderMaterial.prototype.clone = function (name) {
+            var newShaderMaterial = new ShaderMaterial(name, this.getScene(), this._shaderPath, this._options);
+            return newShaderMaterial;
+        };
         ShaderMaterial.prototype.dispose = function (forceDisposeEffect) {
             for (var name in this._textures) {
                 this._textures[name].dispose();

+ 6 - 0
src/Materials/babylon.shaderMaterial.ts

@@ -234,6 +234,12 @@
             super.bind(world, mesh);
         }
 
+        public clone(name: string): ShaderMaterial {
+            var newShaderMaterial = new ShaderMaterial(name, this.getScene(), this._shaderPath, this._options);
+
+            return newShaderMaterial;
+        }        
+
         public dispose(forceDisposeEffect?: boolean): void {
             for (var name in this._textures) {
                 this._textures[name].dispose();

+ 2 - 2
src/PostProcess/babylon.hdrRenderingPipeline.js

@@ -56,12 +56,12 @@ var BABYLON;
             */
             this.maximumLuminance = 1e20;
             /**
-            * Increase rate for luminance: eye adaptation speed to bright
+            * Increase rate for luminance: eye adaptation speed to dark
             * @type {number}
             */
             this.luminanceIncreaserate = 0.5;
             /**
-            * Decrease rate for luminance: eye adaptation speed to dark
+            * Decrease rate for luminance: eye adaptation speed to bright
             * @type {number}
             */
             this.luminanceDecreaseRate = 0.5;

+ 2 - 2
src/PostProcess/babylon.hdrRenderingPipeline.ts

@@ -39,12 +39,12 @@
         */
         public maximumLuminance: number = 1e20;
         /**
-        * Increase rate for luminance: eye adaptation speed to bright
+        * Increase rate for luminance: eye adaptation speed to dark
         * @type {number}
         */
         public luminanceIncreaserate: number = 0.5;
         /**
-        * Decrease rate for luminance: eye adaptation speed to dark
+        * Decrease rate for luminance: eye adaptation speed to bright
         * @type {number}
         */
         public luminanceDecreaseRate: number = 0.5;

+ 1 - 1
src/Rendering/babylon.renderingGroup.js

@@ -37,7 +37,7 @@ var BABYLON;
                 for (subIndex = 0; subIndex < this._transparentSubMeshes.length; subIndex++) {
                     submesh = this._transparentSubMeshes.data[subIndex];
                     submesh._alphaIndex = submesh.getMesh().alphaIndex;
-                    submesh._distanceToCamera = submesh.getBoundingInfo().boundingSphere.centerWorld.subtract(this._scene.activeCamera.position).length();
+                    submesh._distanceToCamera = submesh.getBoundingInfo().boundingSphere.centerWorld.subtract(this._scene.activeCamera.globalPosition).length();
                 }
                 var sortedArray = this._transparentSubMeshes.data.slice(0, this._transparentSubMeshes.length);
                 sortedArray.sort(function (a, b) {

+ 1 - 1
src/Rendering/babylon.renderingGroup.ts

@@ -45,7 +45,7 @@
                 for (subIndex = 0; subIndex < this._transparentSubMeshes.length; subIndex++) {
                     submesh = this._transparentSubMeshes.data[subIndex];
                     submesh._alphaIndex = submesh.getMesh().alphaIndex;
-                    submesh._distanceToCamera = submesh.getBoundingInfo().boundingSphere.centerWorld.subtract(this._scene.activeCamera.position).length();
+                    submesh._distanceToCamera = submesh.getBoundingInfo().boundingSphere.centerWorld.subtract(this._scene.activeCamera.globalPosition).length();
                 }
 
                 var sortedArray = this._transparentSubMeshes.data.slice(0, this._transparentSubMeshes.length);