mirror of
https://github.com/mapillary/mapillary-js.git
synced 2026-01-25 14:07:28 +00:00
Make render camera changed handling robust.
Do not expect that the next frame is a successive integer. Unit test render camera changed handling.
This commit is contained in:
parent
22b7f1841b
commit
11db76868b
54
spec/render/RenderCamera.spec.ts
Normal file
54
spec/render/RenderCamera.spec.ts
Normal file
@ -0,0 +1,54 @@
|
||||
/// <reference path="../../typings/browser.d.ts" />
|
||||
|
||||
import * as THREE from "three";
|
||||
|
||||
import {Camera} from "../../src/Geo";
|
||||
import {RenderCamera, RenderMode} from "../../src/Render";
|
||||
|
||||
describe("RenderCamera.ctor", () => {
|
||||
it("should be defined", () => {
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, RenderMode.Letterbox);
|
||||
|
||||
expect(renderCamera).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe("RenderCamera.updateProjection", () => {
|
||||
it("should not be changed when not updated", () => {
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, RenderMode.Letterbox);
|
||||
|
||||
renderCamera.frameId = 0;
|
||||
|
||||
expect(renderCamera.changed).toBe(false);
|
||||
});
|
||||
|
||||
it("should be changed when projection has been updated", () => {
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, RenderMode.Letterbox);
|
||||
|
||||
renderCamera.updateProjection();
|
||||
renderCamera.frameId = 0;
|
||||
|
||||
expect(renderCamera.changed).toBe(true);
|
||||
});
|
||||
|
||||
it("should not be changed when multiple frame ids are set after projection has been updated", () => {
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, RenderMode.Letterbox);
|
||||
|
||||
renderCamera.updateProjection();
|
||||
renderCamera.frameId = 0;
|
||||
renderCamera.frameId = 1;
|
||||
|
||||
expect(renderCamera.changed).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("RenderCamera.updatePrespective", () => {
|
||||
it("should be changed when not updated", () => {
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, RenderMode.Letterbox);
|
||||
|
||||
renderCamera.updatePerspective(new Camera());
|
||||
renderCamera.frameId = 0;
|
||||
|
||||
expect(renderCamera.changed).toBe(true);
|
||||
});
|
||||
});
|
||||
@ -6,7 +6,6 @@ import {Camera} from "../Geo";
|
||||
import {RenderMode} from "../Render";
|
||||
|
||||
export class RenderCamera {
|
||||
public frameId: number;
|
||||
public alpha: number;
|
||||
public currentAspect: number;
|
||||
public currentOrientation: number;
|
||||
@ -19,12 +18,17 @@ export class RenderCamera {
|
||||
private _camera: Camera;
|
||||
private _perspective: THREE.PerspectiveCamera;
|
||||
|
||||
private _frameId: number;
|
||||
|
||||
private _changed: boolean;
|
||||
private _changedForFrame: number;
|
||||
|
||||
constructor(perspectiveCameraAspect: number, renderMode: RenderMode) {
|
||||
this.frameId = -1;
|
||||
this.alpha = -1;
|
||||
|
||||
this._frameId = -1;
|
||||
|
||||
this._changed = false;
|
||||
this._changedForFrame = -1;
|
||||
|
||||
this.currentAspect = 1;
|
||||
@ -56,6 +60,19 @@ export class RenderCamera {
|
||||
return this.frameId === this._changedForFrame;
|
||||
}
|
||||
|
||||
public get frameId(): number {
|
||||
return this._frameId;
|
||||
}
|
||||
|
||||
public set frameId(value: number) {
|
||||
this._frameId = value;
|
||||
|
||||
if (this._changed) {
|
||||
this._changed = false;
|
||||
this._changedForFrame = value;
|
||||
}
|
||||
}
|
||||
|
||||
public updateProjection(): void {
|
||||
let currentAspect: number = this._getAspect(
|
||||
this.currentAspect,
|
||||
@ -76,7 +93,7 @@ export class RenderCamera {
|
||||
this._perspective.fov = verticalFov;
|
||||
this._perspective.updateProjectionMatrix();
|
||||
|
||||
this._changedForFrame = this.frameId + 1;
|
||||
this._changed = true;
|
||||
}
|
||||
|
||||
public updatePerspective(camera: Camera): void {
|
||||
@ -84,7 +101,7 @@ export class RenderCamera {
|
||||
this._perspective.position.copy(camera.position);
|
||||
this._perspective.lookAt(camera.lookat);
|
||||
|
||||
this._changedForFrame = this.frameId + 1;
|
||||
this._changed = true;
|
||||
}
|
||||
|
||||
private _getVerticalFov(aspect: number, focal: number): number {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user