浏览代码

Merge pull request #2126 from bghgary/camera-fixes

Camera fixes
David Catuhe 8 年之前
父节点
当前提交
4c4fc884f2
共有 3 个文件被更改,包括 26 次插入26 次删除
  1. 5 5
      src/Cameras/babylon.arcRotateCamera.ts
  2. 5 5
      src/Cameras/babylon.targetCamera.ts
  3. 16 16
      src/babylon.scene.ts

+ 5 - 5
src/Cameras/babylon.arcRotateCamera.ts

@@ -315,11 +315,11 @@ module BABYLON {
                 this.inertialAlphaOffset *= this.inertia;
                 this.inertialAlphaOffset *= this.inertia;
                 this.inertialBetaOffset *= this.inertia;
                 this.inertialBetaOffset *= this.inertia;
                 this.inertialRadiusOffset *= this.inertia;
                 this.inertialRadiusOffset *= this.inertia;
-                if (Math.abs(this.inertialAlphaOffset) < Epsilon)
+                if (Math.abs(this.inertialAlphaOffset) < this.speed * Epsilon)
                     this.inertialAlphaOffset = 0;
                     this.inertialAlphaOffset = 0;
-                if (Math.abs(this.inertialBetaOffset) < Epsilon)
+                if (Math.abs(this.inertialBetaOffset) < this.speed * Epsilon)
                     this.inertialBetaOffset = 0;
                     this.inertialBetaOffset = 0;
-                if (Math.abs(this.inertialRadiusOffset) < Epsilon)
+                if (Math.abs(this.inertialRadiusOffset) < this.speed * Epsilon)
                     this.inertialRadiusOffset = 0;
                     this.inertialRadiusOffset = 0;
             }
             }
 
 
@@ -333,9 +333,9 @@ module BABYLON {
                 this.inertialPanningX *= this.inertia;
                 this.inertialPanningX *= this.inertia;
                 this.inertialPanningY *= this.inertia;
                 this.inertialPanningY *= this.inertia;
 
 
-                if (Math.abs(this.inertialPanningX) < Epsilon)
+                if (Math.abs(this.inertialPanningX) < this.speed * Epsilon)
                     this.inertialPanningX = 0;
                     this.inertialPanningX = 0;
-                if (Math.abs(this.inertialPanningY) < Epsilon)
+                if (Math.abs(this.inertialPanningY) < this.speed * Epsilon)
                     this.inertialPanningY = 0;
                     this.inertialPanningY = 0;
 
 
                 this._localDirection.copyFromFloats(this.inertialPanningX, this.inertialPanningY, this.inertialPanningY);
                 this._localDirection.copyFromFloats(this.inertialPanningX, this.inertialPanningY, this.inertialPanningY);

+ 5 - 5
src/Cameras/babylon.targetCamera.ts

@@ -199,26 +199,26 @@ module BABYLON {
 
 
             // Inertia
             // Inertia
             if (needToMove) {
             if (needToMove) {
-                if (Math.abs(this.cameraDirection.x) < Epsilon) {
+                if (Math.abs(this.cameraDirection.x) < this.speed * Epsilon) {
                     this.cameraDirection.x = 0;
                     this.cameraDirection.x = 0;
                 }
                 }
 
 
-                if (Math.abs(this.cameraDirection.y) < Epsilon) {
+                if (Math.abs(this.cameraDirection.y) < this.speed * Epsilon) {
                     this.cameraDirection.y = 0;
                     this.cameraDirection.y = 0;
                 }
                 }
 
 
-                if (Math.abs(this.cameraDirection.z) < Epsilon) {
+                if (Math.abs(this.cameraDirection.z) < this.speed * Epsilon) {
                     this.cameraDirection.z = 0;
                     this.cameraDirection.z = 0;
                 }
                 }
 
 
                 this.cameraDirection.scaleInPlace(this.inertia);
                 this.cameraDirection.scaleInPlace(this.inertia);
             }
             }
             if (needToRotate) {
             if (needToRotate) {
-                if (Math.abs(this.cameraRotation.x) < Epsilon) {
+                if (Math.abs(this.cameraRotation.x) < this.speed * Epsilon) {
                     this.cameraRotation.x = 0;
                     this.cameraRotation.x = 0;
                 }
                 }
 
 
-                if (Math.abs(this.cameraRotation.y) < Epsilon) {
+                if (Math.abs(this.cameraRotation.y) < this.speed * Epsilon) {
                     this.cameraRotation.y = 0;
                     this.cameraRotation.y = 0;
                 }
                 }
                 this.cameraRotation.scaleInPlace(this.inertia);
                 this.cameraRotation.scaleInPlace(this.inertia);

+ 16 - 16
src/babylon.scene.ts

@@ -3589,26 +3589,26 @@
 
 
             // Camera
             // Camera
             if (!this.activeCamera) {
             if (!this.activeCamera) {
-                // Compute position
                 var worldExtends = this.getWorldExtends();
                 var worldExtends = this.getWorldExtends();
-                var worldCenter = worldExtends.min.add(worldExtends.max.subtract(worldExtends.min).scale(0.5));
-
-                var camera;
+                var worldSize = worldExtends.max.subtract(worldExtends.min);
+                var worldCenter = worldExtends.min.add(worldSize.scale(0.5));
 
 
+                var camera: TargetCamera;
+                var radius = worldSize.length() * 1.5;
                 if (createArcRotateCamera) {
                 if (createArcRotateCamera) {
-                    camera = new ArcRotateCamera("default camera", 0, 0, 10, Vector3.Zero(), this);
-                    camera.setPosition(new Vector3(worldCenter.x, worldCenter.y, worldExtends.min.z - (worldExtends.max.z - worldExtends.min.z)));
-                    camera.lowerRadiusLimit = 0.5;
-                    camera.setTarget(worldCenter);
-                } else {
-                    camera = new FreeCamera("default camera", Vector3.Zero(), this);
-
-                    camera.position = new Vector3(worldCenter.x, worldCenter.y, worldExtends.min.z - (worldExtends.max.z - worldExtends.min.z));
-                    camera.setTarget(worldCenter);
+                    var arcRotateCamera = new ArcRotateCamera("default camera", 4.712, 1.571, radius, worldCenter, this);
+                    arcRotateCamera.lowerRadiusLimit = radius * 0.01;
+                    arcRotateCamera.wheelPrecision = 100 / radius;
+                    camera = arcRotateCamera;
+                }
+                else {
+                    var freeCamera = new FreeCamera("default camera", new Vector3(worldCenter.x, worldCenter.y, this.useRightHandedSystem ? -radius : radius), this);
+                    freeCamera.setTarget(worldCenter);
+                    camera = freeCamera;
                 }
                 }
-                camera.minZ = 0.1;
-                var maxDist = worldExtends.max.subtract(worldExtends.min).length();
-                camera.wheelPrecision = 100.0 / maxDist;
+                camera.minZ = radius * 0.01;
+                camera.maxZ = radius * 100;
+                camera.speed = radius * 0.2;
                 this.activeCamera = camera;
                 this.activeCamera = camera;
             }
             }
         }
         }