소스 검색

Merge pull request #2953 from orangesuzuki/feature/fix-camera-animation

Animation update with Unity Exporter
David Catuhe 7 년 전
부모
커밋
b912b816a8
2개의 변경된 파일34개의 추가작업 그리고 8개의 파일을 삭제
  1. 32 6
      src/Animations/babylon.animation.ts
  2. 2 2
      src/Cameras/babylon.targetCamera.ts

+ 32 - 6
src/Animations/babylon.animation.ts

@@ -508,7 +508,7 @@
             var animation = new Animation(parsedAnimation.name, parsedAnimation.property, parsedAnimation.framePerSecond, parsedAnimation.dataType, parsedAnimation.loopBehavior);
 
             var dataType = parsedAnimation.dataType;
-            var keys: Array<{ frame: number, value: any }> = [];
+            var keys: Array<{ frame: number, value: any, inTangent:any, outTangent:any }> = [];
             var data;
             var index: number;
 
@@ -522,14 +522,33 @@
 
             for (index = 0; index < parsedAnimation.keys.length; index++) {
                 var key = parsedAnimation.keys[index];
-
+                var inTangent:any;
+                var outTangent:any;
 
                 switch (dataType) {
                     case Animation.ANIMATIONTYPE_FLOAT:
                         data = key.values[0];
+                        if (key.values.length >= 1) {
+                            inTangent = key.values[1];
+                        }
+                        if (key.values.length >= 2) {
+                            outTangent = key.values[2];
+                        }
                         break;
                     case Animation.ANIMATIONTYPE_QUATERNION:
                         data = Quaternion.FromArray(key.values);
+                        if (key.values.length >= 8) {
+                            var _inTangent = Quaternion.FromArray(key.values.slice(4, 8));
+                            if (!_inTangent.equals(Quaternion.Zero())) {
+                                inTangent = _inTangent;
+                            }
+                        }
+                        if (key.values.length >= 12) {
+                            var _outTangent = Quaternion.FromArray(key.values.slice(8, 12));
+                            if (!_outTangent.equals(Quaternion.Zero())) {
+                                outTangent = _outTangent;
+                            }
+                        }
                         break;
                     case Animation.ANIMATIONTYPE_MATRIX:
                         data = Matrix.FromArray(key.values);
@@ -543,10 +562,17 @@
                         break;
                 }
 
-                keys.push({
-                    frame: key.frame,
-                    value: data
-                });
+                var keyData:any = {};
+                keyData.frame = key.frame;
+                keyData.value = data;
+
+                if (inTangent != undefined) {
+                    keyData.inTangent = inTangent;
+                }
+                if (outTangent != undefined) {
+                    keyData.outTangent = outTangent;
+                }
+                keys.push(keyData)
             }
 
             animation.setKeys(keys);

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

@@ -270,11 +270,11 @@ module BABYLON {
         protected _updateCameraRotationMatrix() {
             if (this.rotationQuaternion) {
                 this.rotationQuaternion.toRotationMatrix(this._cameraRotationMatrix);
-                //update the up vector!
-                BABYLON.Vector3.TransformNormalToRef(this._defaultUpVector, this._cameraRotationMatrix, this.upVector);
             } else {
                 Matrix.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this._cameraRotationMatrix);
             }
+            //update the up vector!
+            BABYLON.Vector3.TransformNormalToRef(this._defaultUpVector, this._cameraRotationMatrix, this.upVector);
         }
 
         public _getViewMatrix(): Matrix {