From de5c0c87d7594d6d058aef0ae36a9128488609e5 Mon Sep 17 00:00:00 2001 From: Hykilpikonna Date: Sat, 11 Dec 2021 12:58:36 -0500 Subject: [PATCH] [+] Add z parameter to project function --- src/animation/Trackers.ts | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/animation/Trackers.ts b/src/animation/Trackers.ts index b43d96e..6cefa44 100644 --- a/src/animation/Trackers.ts +++ b/src/animation/Trackers.ts @@ -15,14 +15,27 @@ export function initMouseTracker(): void mouse = e moused.x = e.clientX / window.innerWidth * 2 - 1 moused.y = -(e.clientY / window.innerHeight * 2 - 1) - - // Project to 3d position - // https://www.reddit.com/r/threejs/comments/eba9l3/3d_cursor_using_threejs_html_css/ - // https://jsfiddle.net/atwfxdpd/10/ - const vector = new THREE.Vector3(moused.x, moused.y, 0.5) - vector.unproject(camera) - const dir = vector.sub(camera.position).normalize() - const distance = -camera.position.z / dir.z - moused.pos = camera.position.clone().add(dir.multiplyScalar(distance)) + moused.pos = projectTo3D(moused.x, moused.y, 0) } } + +/** + * Project to 3D position + * https://www.reddit.com/r/threejs/comments/eba9l3/3d_cursor_using_threejs_html_css/ + * https://jsfiddle.net/atwfxdpd/10/ + * + * @param screenX X position on 2D canvas + * @param screenY Y position on 2D canvas + * @param z Z position in 3D + */ +export function projectTo3D(screenX: number, screenY: number, z: number): Vector3 +{ + const vector = new THREE.Vector3(screenX, screenY, 0.5) + vector.unproject(camera) + const dir = vector.sub(camera.position).normalize() + const distance = (-camera.position.z + z) / dir.z + const pos = camera.position.clone().add(dir.multiplyScalar(distance)) + // console.log('Dir:', dir) + // console.log('Pos:', pos) + return pos +}