Bläddra i källkod

animation blending and fixing tests

Raanan Weber 7 år sedan
förälder
incheckning
2f852b4cd1

+ 5 - 3
Viewer/src/model/viewerModel.ts

@@ -262,6 +262,7 @@ export class ViewerModel implements IDisposable {
     private _enterScene(completeCallback?: () => void): void {
         let callback = () => {
             this.state = ModelState.ENTRYDONE;
+            this._viewer.sceneManager.animationBlendingEnabled = true;
             this._checkCompleteState();
             if (completeCallback) completeCallback();
         }
@@ -269,7 +270,8 @@ export class ViewerModel implements IDisposable {
             callback();
             return;
         }
-
+        // disable blending for the sake of the entry animation;
+        this._viewer.sceneManager.animationBlendingEnabled = false;
         this._applyAnimation(this._entryAnimation, true, callback);
     }
 
@@ -542,8 +544,8 @@ export class ViewerModel implements IDisposable {
         //scale
         if (animationConfiguration.scaling) {
 
-            let scaleStart: BABYLON.Vector3 = isEntry ? animationConfiguration.scaling : new BABYLON.Vector3(1, 1, 1);
-            let scaleEnd: BABYLON.Vector3 = isEntry ? new BABYLON.Vector3(1, 1, 1) : animationConfiguration.scaling;
+            let scaleStart: BABYLON.Vector3 = isEntry ? animationConfiguration.scaling : this.rootMesh.scaling;
+            let scaleEnd: BABYLON.Vector3 = isEntry ? this.rootMesh.scaling : animationConfiguration.scaling;
 
             if (!scaleStart.equals(scaleEnd)) {
                 this.rootMesh.scaling = scaleStart;

+ 1 - 5
Viewer/src/viewer/defaultViewer.ts

@@ -22,10 +22,6 @@ export class DefaultViewer extends AbstractViewer {
     constructor(public containerElement: HTMLElement, initialConfiguration: ViewerConfiguration = { extends: 'default' }) {
         super(containerElement, initialConfiguration);
         this.onModelLoadedObservable.add(this._onModelLoaded);
-        this.sceneManager.onSceneInitObservable.add(() => {
-            // extendClassWithConfig(this.sceneManager.scene, this._configuration.scene);
-            return this.sceneManager.scene;
-        });
 
         this.sceneManager.onLightsConfiguredObservable.add((data) => {
             this._configureLights(data.newConfiguration, data.model!);
@@ -182,7 +178,7 @@ export class DefaultViewer extends AbstractViewer {
     private _onModelLoaded = (model: ViewerModel) => {
         this._configureTemplate(model);
         // with a short timeout, making sure everything is there already.
-        let hideLoadingDelay = 500;
+        let hideLoadingDelay = 20;
         if (this._configuration.lab && this._configuration.lab.hideLoadingDelay !== undefined) {
             hideLoadingDelay = this._configuration.lab.hideLoadingDelay;
         }

+ 19 - 3
Viewer/src/viewer/sceneManager.ts

@@ -72,6 +72,8 @@ export class SceneManager {
      */
     public environmentHelper: EnvironmentHelper;
 
+    private _animationBlendingEnabled: boolean = true;
+
 
     //The following are configuration objects, default values.
     protected _defaultHighpTextureType: number;
@@ -173,6 +175,16 @@ export class SceneManager {
         return this._reflectionColor;
     }
 
+    public get animationBlendingEnabled() {
+        return this._animationBlendingEnabled;
+    }
+
+    public set animationBlendingEnabled(value: boolean) {
+        this.scene.animationPropertiesOverride = this.scene.animationPropertiesOverride || new AnimationPropertiesOverride();
+        this.scene.animationPropertiesOverride.enableBlending = value;
+        this._animationBlendingEnabled = value;
+    }
+
     private _processShadows: boolean = true;
 
     /**
@@ -315,7 +327,6 @@ export class SceneManager {
         }
 
         this.scene.animationPropertiesOverride = new AnimationPropertiesOverride();
-        this.scene.animationPropertiesOverride.enableBlending = true;
 
         Animation.AllowMatricesInterpolation = true;
 
@@ -570,7 +581,9 @@ export class SceneManager {
             this._handleHardwareLimitations(true);
         }
 
-        this._viewer.renderInBackground = !!sceneConfig.renderInBackground;
+        if (sceneConfig.renderInBackground !== undefined) {
+            this._viewer.renderInBackground = !!sceneConfig.renderInBackground;
+        }
 
         if (this.camera && sceneConfig.disableCameraControl) {
             this.camera.detachControl(this._viewer.canvas);
@@ -732,7 +745,9 @@ export class SceneManager {
 
         if (cameraConfig.behaviors) {
             for (let name in cameraConfig.behaviors) {
-                this._setCameraBehavior(cameraConfig.behaviors[name]);
+                if (cameraConfig.behaviors[name]) {
+                    this._setCameraBehavior(cameraConfig.behaviors[name]);
+                }
             }
         };
 
@@ -776,6 +791,7 @@ export class SceneManager {
         this.camera.setTarget(center);
         this.camera.alpha = (this._viewer.configuration.camera && this._viewer.configuration.camera.alpha) || this.camera.alpha;
         this.camera.beta = (this._viewer.configuration.camera && this._viewer.configuration.camera.beta) || this.camera.beta;
+        this.camera.radius = (this._viewer.configuration.camera && this._viewer.configuration.camera.radius) || this.camera.radius;
     }
 
     protected _configureEnvironment(skyboxConifguration?: ISkyboxConfiguration | boolean, groundConfiguration?: IGroundConfiguration | boolean, model?: ViewerModel) {

+ 3 - 3
Viewer/src/viewer/viewer.ts

@@ -207,9 +207,9 @@ export abstract class AbstractViewer {
 
         this.onInitDoneObservable.add(() => {
             this._isInit = true;
-            this.sceneManager.scene.executeWhenReady(() => {
-                this.engine.runRenderLoop(this._render);
-            });
+            //this.sceneManager.scene.executeWhenReady(() => {
+            this.engine.runRenderLoop(this._render);
+            //});
         });
     }
 

+ 4 - 4
Viewer/tests/unit/src/viewer/viewer.ts

@@ -76,7 +76,7 @@ describe('Viewer', function () {
         let viewer: DefaultViewer = <DefaultViewer>Helper.getNewViewerInstance();
         let renderCount = 0;
         let sceneRenderCount = 0;
-        viewer.onSceneInitObservable.add(() => {
+        viewer.onSceneInitObservable.add((scene) => {
             viewer.sceneManager.scene.registerBeforeRender(() => {
                 sceneRenderCount++;
             });
@@ -174,13 +174,13 @@ describe('Viewer', function () {
     it('should render in background if set to true', (done) => {
         let viewer = Helper.getNewViewerInstance();
         viewer.onInitDoneObservable.add(() => {
-            assert.isFalse(viewer.engine.renderEvenInBackground, "Engine is rendering in background");
+            assert.isTrue(viewer.engine.renderEvenInBackground, "Engine is rendering in background");
             viewer.updateConfiguration({
                 scene: {
-                    renderInBackground: true
+                    renderInBackground: false
                 }
             });
-            assert.isTrue(viewer.engine.renderEvenInBackground, "Engine is not rendering in background");
+            assert.isFalse(viewer.engine.renderEvenInBackground, "Engine is not rendering in background");
             viewer.dispose();
             done();
         });