|
@@ -6,26 +6,18 @@
|
|
private _scriptProjection: Matrix;
|
|
private _scriptProjection: Matrix;
|
|
private _scriptViewProjection: Matrix;
|
|
private _scriptViewProjection: Matrix;
|
|
|
|
|
|
- private _onBeforeRenderObserver: Observer<Scene>;
|
|
|
|
|
|
+ private _holographicViewMatrix: Matrix;
|
|
|
|
|
|
- private _holographicViewMatrix: Matrix;
|
|
|
|
- private _holographicViewMatrixChanged = false;
|
|
|
|
|
|
+ private _onBeforeRenderObserver: Observer<Scene>;
|
|
|
|
+ private _onBeforeCameraRenderObserver: Observer<Camera>;
|
|
|
|
|
|
constructor(name: string, position: Vector3, scene: Scene) {
|
|
constructor(name: string, position: Vector3, scene: Scene) {
|
|
super(name, position, scene);
|
|
super(name, position, scene);
|
|
|
|
|
|
- this._holographicViewMatrix = new Matrix();
|
|
|
|
-
|
|
|
|
scene.clearColor = new BABYLON.Color4(0, 0, 0, 0);
|
|
scene.clearColor = new BABYLON.Color4(0, 0, 0, 0);
|
|
|
|
|
|
- var self = this;
|
|
|
|
- this._onBeforeRenderObserver = scene.onBeforeRenderObservable.add(function (scene) {
|
|
|
|
- self._holographicViewMatrix.m = (<any>window).getViewMatrix();
|
|
|
|
- self.setViewMatrix(self._holographicViewMatrix);
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
|
|
+ this._holographicViewMatrix = new Matrix();
|
|
this._identityProjection = BABYLON.Matrix.Identity();
|
|
this._identityProjection = BABYLON.Matrix.Identity();
|
|
-
|
|
|
|
this._scriptProjection = BABYLON.Matrix.Transpose(BABYLON.Matrix.PerspectiveFovLH(30, window.innerWidth / window.innerHeight, 1, 20));
|
|
this._scriptProjection = BABYLON.Matrix.Transpose(BABYLON.Matrix.PerspectiveFovLH(30, window.innerWidth / window.innerHeight, 1, 20));
|
|
this._scriptViewProjection = BABYLON.Matrix.Identity();
|
|
this._scriptViewProjection = BABYLON.Matrix.Identity();
|
|
|
|
|
|
@@ -39,6 +31,17 @@
|
|
this.fovMode = BABYLON.Camera.FOVMODE_VERTICAL_FIXED;
|
|
this.fovMode = BABYLON.Camera.FOVMODE_VERTICAL_FIXED;
|
|
this.cameraRigMode = BABYLON.Camera.RIG_MODE_NONE;
|
|
this.cameraRigMode = BABYLON.Camera.RIG_MODE_NONE;
|
|
|
|
|
|
|
|
+ var self = this;
|
|
|
|
+ this._onBeforeRenderObserver = scene.onBeforeRenderObservable.add(function (scene) {
|
|
|
|
+ self._holographicViewMatrix.m = (<any>window).getViewMatrix();
|
|
|
|
+ self.setViewMatrix(self._holographicViewMatrix);
|
|
|
|
+ })
|
|
|
|
+ this._onBeforeCameraRenderObserver = scene.onBeforeCameraRenderObservable.add(function() {
|
|
|
|
+ if (scene.frustumPlanes) {
|
|
|
|
+ self.getFrustumPlanesToRef(scene.frustumPlanes);
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+
|
|
scene.addCamera(this);
|
|
scene.addCamera(this);
|
|
if (!scene.activeCamera) {
|
|
if (!scene.activeCamera) {
|
|
scene.activeCamera = this;
|
|
scene.activeCamera = this;
|
|
@@ -47,25 +50,15 @@
|
|
|
|
|
|
public getTypeName(): string {
|
|
public getTypeName(): string {
|
|
return "HolographicCamera";
|
|
return "HolographicCamera";
|
|
- };
|
|
|
|
-
|
|
|
|
- public _initCache(): void {
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- public _updateCache(): void {
|
|
|
|
- // Check why ???
|
|
|
|
- this._holographicViewMatrixChanged = false;
|
|
|
|
- };
|
|
|
|
|
|
+ };
|
|
|
|
|
|
- public _updateFromScene(): void {
|
|
|
|
- };
|
|
|
|
|
|
|
|
- // Synchronized
|
|
|
|
- public _isSynchronizedViewMatrix() : boolean {
|
|
|
|
- return !this._holographicViewMatrixChanged;
|
|
|
|
|
|
+ public getProjectionMatrix(): Matrix {
|
|
|
|
+ return this._identityProjection;
|
|
};
|
|
};
|
|
- public _isSynchronizedProjectionMatrix() : boolean {
|
|
|
|
- return true;
|
|
|
|
|
|
+
|
|
|
|
+ public getViewMatrix(): Matrix {
|
|
|
|
+ return this._holographicViewMatrix;
|
|
};
|
|
};
|
|
|
|
|
|
public setViewMatrix(view: Matrix) : void {
|
|
public setViewMatrix(view: Matrix) : void {
|
|
@@ -73,26 +66,18 @@
|
|
this.position.x = view.m[12];
|
|
this.position.x = view.m[12];
|
|
this.position.y = view.m[13];
|
|
this.position.y = view.m[13];
|
|
this.position.z = -view.m[14];
|
|
this.position.z = -view.m[14];
|
|
- this._holographicViewMatrixChanged = true;
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- public getViewMatrix(): Matrix {
|
|
|
|
- return this._holographicViewMatrix;
|
|
|
|
};
|
|
};
|
|
|
|
+
|
|
|
|
+ public _initCache(): void { };
|
|
|
|
+ public _updateCache(): void { };
|
|
|
|
+ public _updateFromScene(): void { };
|
|
|
|
|
|
- public getProjectionMatrix(): Matrix {
|
|
|
|
- return this._identityProjection;
|
|
|
|
|
|
+ // Synchronized
|
|
|
|
+ public _isSynchronizedViewMatrix() : boolean {
|
|
|
|
+ return true;
|
|
};
|
|
};
|
|
-
|
|
|
|
- public computeFrustumPlanes(frustumPlanes: Plane[]) : void {
|
|
|
|
- if (frustumPlanes) {
|
|
|
|
- this.getFrustumPlanesToRef(frustumPlanes);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private getFrustumPlanes(): Plane[] {
|
|
|
|
- this._holographicViewMatrix.multiplyToRef(this._scriptProjection, this._scriptViewProjection);
|
|
|
|
- return BABYLON.Frustum.GetPlanes(this._scriptViewProjection);
|
|
|
|
|
|
+ public _isSynchronizedProjectionMatrix() : boolean {
|
|
|
|
+ return true;
|
|
};
|
|
};
|
|
|
|
|
|
private getFrustumPlanesToRef(result: Plane[]): Plane[] {
|
|
private getFrustumPlanesToRef(result: Plane[]): Plane[] {
|
|
@@ -103,7 +88,7 @@
|
|
|
|
|
|
public dispose(): void {
|
|
public dispose(): void {
|
|
this.getScene().onBeforeRenderObservable.remove(this._onBeforeRenderObserver);
|
|
this.getScene().onBeforeRenderObservable.remove(this._onBeforeRenderObserver);
|
|
-
|
|
|
|
|
|
+ this.getScene().onBeforeCameraRenderObservable.remove(this._onBeforeCameraRenderObserver);
|
|
super.dispose();
|
|
super.dispose();
|
|
}
|
|
}
|
|
}
|
|
}
|