فهرست منبع

Merge pull request #608 from Bondza/master

Add ArcFollowCamera
Temechon 10 سال پیش
والد
کامیت
ad68d7d999
2فایلهای تغییر یافته به همراه52 افزوده شده و 3 حذف شده
  1. 25 1
      src/Cameras/babylon.followCamera.js
  2. 27 2
      src/Cameras/babylon.followCamera.ts

+ 25 - 1
src/Cameras/babylon.followCamera.js

@@ -59,5 +59,29 @@ var BABYLON;
         return FollowCamera;
     })(BABYLON.TargetCamera);
     BABYLON.FollowCamera = FollowCamera;
+    var ArcFollowCamera = (function (_super) {
+        __extends(ArcFollowCamera, _super);
+        function ArcFollowCamera(name, alpha, beta, radius, target, scene) {
+            _super.call(this, name, BABYLON.Vector3.Zero(), scene);
+            this.alpha = alpha;
+            this.beta = beta;
+            this.radius = radius;
+            this.target = target;
+            this._cartesianCoordinates = BABYLON.Vector3.Zero();
+            this.follow();
+        }
+        ArcFollowCamera.prototype.follow = function () {
+            this._cartesianCoordinates.x = this.radius * Math.cos(this.alpha) * Math.cos(this.beta);
+            this._cartesianCoordinates.y = this.radius * Math.sin(this.beta);
+            this._cartesianCoordinates.z = this.radius * Math.sin(this.alpha) * Math.cos(this.beta);
+            this.position = this.target.position.add(this._cartesianCoordinates);
+            this.setTarget(this.target.position);
+        };
+        ArcFollowCamera.prototype._checkInputs = function () {
+            _super.prototype._checkInputs.call(this);
+            this.follow();
+        };
+        return ArcFollowCamera;
+    })(BABYLON.TargetCamera);
+    BABYLON.ArcFollowCamera = ArcFollowCamera;
 })(BABYLON || (BABYLON = {}));
-//# sourceMappingURL=babylon.followCamera.js.map

+ 27 - 2
src/Cameras/babylon.followCamera.ts

@@ -19,7 +19,7 @@
         private follow(cameraTarget:AbstractMesh) {
             if (!cameraTarget)
                 return;
-            
+
             var yRotation;
             if (cameraTarget.rotationQuaternion) {
                 var rotMatrix = new Matrix();
@@ -60,4 +60,29 @@
             this.follow(this.target);
         }
     }
-} 
+
+    export class ArcFollowCamera extends TargetCamera {
+
+        private _cartesianCoordinates:Vector3 = Vector3.Zero();
+
+        constructor(name:string, public alpha:number, public beta:number, public radius:number, public target:AbstractMesh, scene:Scene) {
+            super(name, Vector3.Zero(), scene);
+            this.follow();
+        }
+
+        private follow():void {
+            this._cartesianCoordinates.x = this.radius * Math.cos(this.alpha) * Math.cos(this.beta);
+            this._cartesianCoordinates.y = this.radius * Math.sin(this.beta);
+            this._cartesianCoordinates.z = this.radius * Math.sin(this.alpha) * Math.cos(this.beta);
+
+            this.position = this.target.position.add(this._cartesianCoordinates);
+            this.setTarget(this.target.position);
+        }
+
+        public _checkInputs():void {
+            super._checkInputs();
+            this.follow();
+        }
+    }
+}
+