From 729296694b8d2a5686737328aaf856416f752b32 Mon Sep 17 00:00:00 2001 From: Oscar Lorentzon Date: Wed, 1 Sep 2021 11:45:36 +0200 Subject: [PATCH] fix(spatial): render spherical camera frames Render camera frame lines on a sphere instead of a plane to avoid large star shapes for short focal lengths. --- src/component/spatial/scene/PerspectiveCameraFrame.ts | 6 ++---- src/render/RenderCamera.ts | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/component/spatial/scene/PerspectiveCameraFrame.ts b/src/component/spatial/scene/PerspectiveCameraFrame.ts index 214c1c67..968f9b40 100644 --- a/src/component/spatial/scene/PerspectiveCameraFrame.ts +++ b/src/component/spatial/scene/PerspectiveCameraFrame.ts @@ -19,13 +19,12 @@ export class PerspectiveCameraFrame extends CameraFrameBase { origin: number[]) : number[] { - const depth = size; const [originX, originY, originZ] = origin; const cameraCenter = [0, 0, 0]; const positions: number[] = []; for (const vertex2d of [[0, 0], [1, 0], [1, 1], [0, 1]]) { - const corner = transform.unprojectBasic(vertex2d, depth, true); + const corner = transform.unprojectBasic(vertex2d, size); corner[0] -= originX; corner[1] -= originY; corner[2] -= originZ; @@ -48,13 +47,12 @@ export class PerspectiveCameraFrame extends CameraFrameBase { vertices2d.push(...this._subsample([0, 0], [1, 0], samples)); vertices2d.push(...this._subsample([1, 0], [1, 1], samples)); - const depth = size; const [originX, originY, originZ] = origin; const positions: number[] = []; for (const vertex2d of vertices2d) { const position = transform.unprojectBasic( - vertex2d, depth, true); + vertex2d, size); position[0] -= originX; position[1] -= originY; position[2] -= originZ; diff --git a/src/render/RenderCamera.ts b/src/render/RenderCamera.ts index e8ce45e2..ef8221b1 100644 --- a/src/render/RenderCamera.ts +++ b/src/render/RenderCamera.ts @@ -89,7 +89,7 @@ export class RenderCamera { this._perspective = new THREE.PerspectiveCamera( this._initialFov, this._computeAspect(elementWidth, elementHeight), - 0.16, + 0.1, 10000); this._perspective.position.copy(this._camera.position); this._perspective.up.copy(this._camera.up);