浏览代码

Specific cameras' properties

Special parameters for specific cameras will be set.
Implemented as it is for readability and structure.
Raanan Weber 10 年之前
父节点
当前提交
d1a6a8064c
共有 2 个文件被更改,包括 49 次插入6 次删除
  1. 25 3
      Babylon/Tools/babylon.sceneSerializer.js
  2. 24 3
      Babylon/Tools/babylon.sceneSerializer.ts

+ 25 - 3
Babylon/Tools/babylon.sceneSerializer.js

@@ -100,6 +100,25 @@ var BABYLON;
         else if (camera instanceof BABYLON.VRDeviceOrientationCamera) {
             serializationObject.type = "VRDeviceOrientationCamera";
         }
+        //special properties of specific cameras
+        if (camera instanceof BABYLON.ArcRotateCamera || camera instanceof BABYLON.AnaglyphArcRotateCamera) {
+            var arcCamera = camera;
+            serializationObject.alpha = arcCamera.alpha;
+            serializationObject.beta = arcCamera.beta;
+            serializationObject.radius = arcCamera.radius;
+        }
+        else if (camera instanceof BABYLON.FollowCamera) {
+            var followCam = camera;
+            serializationObject.radius = followCam.radius;
+            serializationObject.heightOffset = followCam.heightOffset;
+            serializationObject.rotationOffset = followCam.rotationOffset;
+        }
+        else if (camera instanceof BABYLON.AnaglyphFreeCamera || camera instanceof BABYLON.AnaglyphArcRotateCamera) {
+            //eye space is a private member and can only be access like this. Without changing the implementation this is the best way to get it.
+            if (camera['_eye_space'] !== undefined) {
+                serializationObject.eye_space = BABYLON.Tools.ToDegrees(camera['_eye_space']);
+            }
+        }
         //general properties that not all cameras have. The [] is due to typescript's type safety
         if (camera['speed'] !== undefined) {
             serializationObject.speed = camera['speed'];
@@ -112,9 +131,12 @@ var BABYLON;
         if (camera['lockedTarget'] && camera['lockedTarget'].id) {
             serializationObject.lockedTargetId = camera['lockedTarget'].id;
         }
-        //will be undefined if not defined.
-        serializationObject.checkCollisions = camera['checkCollisions'];
-        serializationObject.applyGravity = camera['applyGravity'];
+        if (camera['checkCollisions'] !== undefined) {
+            serializationObject.checkCollisions = camera['checkCollisions'];
+        }
+        if (camera['applyGravity'] !== undefined) {
+            serializationObject.applyGravity = camera['applyGravity'];
+        }
         if (camera['ellipsoid']) {
             serializationObject.ellipsoid = camera['ellipsoid'].asArray();
         }

+ 24 - 3
Babylon/Tools/babylon.sceneSerializer.ts

@@ -99,6 +99,24 @@
             serializationObject.type = "VRDeviceOrientationCamera";
         } 
 
+        //special properties of specific cameras
+        if (camera instanceof ArcRotateCamera || camera instanceof AnaglyphArcRotateCamera) {
+            var arcCamera = <ArcRotateCamera> camera;
+            serializationObject.alpha = arcCamera.alpha;
+            serializationObject.beta = arcCamera.beta;
+            serializationObject.radius = arcCamera.radius;
+        } else if (camera instanceof FollowCamera) {
+            var followCam = <FollowCamera> camera;
+            serializationObject.radius = followCam.radius;
+            serializationObject.heightOffset = followCam.heightOffset;
+            serializationObject.rotationOffset = followCam.rotationOffset;
+        } else if (camera instanceof AnaglyphFreeCamera || camera instanceof AnaglyphArcRotateCamera) {
+            //eye space is a private member and can only be access like this. Without changing the implementation this is the best way to get it.
+            if (camera['_eye_space'] !== undefined) {
+                serializationObject.eye_space = Tools.ToDegrees(camera['_eye_space']);
+            }
+        }
+
         //general properties that not all cameras have. The [] is due to typescript's type safety
         if (camera['speed'] !== undefined) {
             serializationObject.speed = camera['speed'];
@@ -114,9 +132,12 @@
             serializationObject.lockedTargetId = camera['lockedTarget'].id;
         }
 
-        //will be undefined if not defined.
-        serializationObject.checkCollisions = camera['checkCollisions'];
-        serializationObject.applyGravity = camera['applyGravity'];
+        if (camera['checkCollisions'] !== undefined) {
+            serializationObject.checkCollisions = camera['checkCollisions'];
+        }
+        if (camera['applyGravity'] !== undefined) {
+            serializationObject.applyGravity = camera['applyGravity'];
+        }
 
         if (camera['ellipsoid']) {
             serializationObject.ellipsoid = camera['ellipsoid'].asArray();