From c941ced5aff21ee733ca152fad5a51136c7c9a35 Mon Sep 17 00:00:00 2001 From: dylanebert Date: Sat, 9 Dec 2023 22:14:09 -0500 Subject: [PATCH] editor refactoring --- examples/editor/src/main.ts | 21 +++------------------ examples/editor/src/utils.ts | 20 +++++++++++++++++++- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/examples/editor/src/main.ts b/examples/editor/src/main.ts index d33bd56..1566e2a 100644 --- a/examples/editor/src/main.ts +++ b/examples/editor/src/main.ts @@ -1,5 +1,5 @@ import * as SPLAT from "gsplat"; -import { findIntersectedPoint } from "./utils"; +import { findIntersectedPoint, getPointerDirection } from "./utils"; const canvas = document.getElementById("canvas") as HTMLCanvasElement; const progressDialog = document.getElementById("progress-dialog") as HTMLDialogElement; @@ -22,23 +22,8 @@ async function main() { const handleClicked = (event: MouseEvent) => { const x = (event.clientX / canvas.clientWidth) * 2 - 1; const y = -(event.clientY / canvas.clientHeight) * 2 + 1; - const clipSpaceCoords = new SPLAT.Vector4(x, y, -1, 1); - - const inverseProjectionMatrix = camera.data.projectionMatrix.invert(); - const cameraSpaceCoords = clipSpaceCoords.multiply(inverseProjectionMatrix); - - const inverseViewMatrix = camera.data.viewMatrix.invert(); - const worldSpaceCoords = cameraSpaceCoords.multiply(inverseViewMatrix); - const worldSpacePosition = new SPLAT.Vector3( - worldSpaceCoords.x / worldSpaceCoords.w, - worldSpaceCoords.y / worldSpaceCoords.w, - worldSpaceCoords.z / worldSpaceCoords.w, - ); - - const origin = camera.position; - const direction = worldSpacePosition.subtract(origin).normalize(); - - const closestSplat = findIntersectedPoint(bonsai, origin, direction); + const direction = getPointerDirection(x, y, camera); + const closestSplat = findIntersectedPoint(bonsai, camera.position, direction); if (closestSplat !== null) { console.log(`Clicked on splat ${closestSplat}`); } diff --git a/examples/editor/src/utils.ts b/examples/editor/src/utils.ts index 83840cd..df260ec 100644 --- a/examples/editor/src/utils.ts +++ b/examples/editor/src/utils.ts @@ -106,4 +106,22 @@ function findIntersectedPoint(splat: SPLAT.Splat, origin: SPLAT.Vector3, directi return closestPoint; } -export { findIntersectedPoint }; +function getPointerDirection(x: number, y: number, camera: SPLAT.Camera) { + const clipSpaceCoords = new SPLAT.Vector4(x, y, -1, 1); + + const inverseProjectionMatrix = camera.data.projectionMatrix.invert(); + const cameraSpaceCoords = clipSpaceCoords.multiply(inverseProjectionMatrix); + + const inverseViewMatrix = camera.data.viewMatrix.invert(); + const worldSpaceCoords = cameraSpaceCoords.multiply(inverseViewMatrix); + const worldSpacePosition = new SPLAT.Vector3( + worldSpaceCoords.x / worldSpaceCoords.w, + worldSpaceCoords.y / worldSpaceCoords.w, + worldSpaceCoords.z / worldSpaceCoords.w, + ); + + const direction = worldSpacePosition.subtract(camera.position).normalize(); + return direction; +} + +export { findIntersectedPoint, getPointerDirection };