Spaces:
Runtime error
Runtime error
export function getCoordinatesFromMousePosition({ | |
mouseX, | |
mouseY, | |
containerWidth, | |
containerHeight, | |
currentYaw, | |
currentPitch, | |
imageWidth, | |
imageHeight, | |
fov, | |
}: { | |
mouseX: number, | |
mouseY: number, | |
containerWidth: number, | |
containerHeight: number, | |
currentYaw: number, | |
currentPitch: number, | |
imageWidth: number, | |
imageHeight: number, | |
fov: number, | |
}): { x: number; y: number } { | |
// Considering the full width/height of FOV | |
const relativeX = 2 * (mouseX / containerWidth) - 1; | |
const relativeY = 2 * (mouseY / containerHeight) - 1; | |
// yaw varies with FOV over width and pitch over height | |
const deltaYaw = relativeX * fov * (Math.PI / 180); | |
const deltaPitch = relativeY * fov * (Math.PI / 180); | |
let newYaw = currentYaw + deltaYaw; | |
while (newYaw < 0) newYaw += 2 * Math.PI; | |
while (newYaw > 2 * Math.PI) newYaw -= 2 * Math.PI; | |
let newPitch = currentPitch + deltaPitch; | |
if (newPitch < -Math.PI / 2) newPitch = -Math.PI / 2; | |
if (newPitch > Math.PI / 2) newPitch = Math.PI / 2; | |
// Changing origin for the yaw rotation to bring image center to screen center | |
newYaw = (newYaw + Math.PI) % (2 * Math.PI); | |
// Image X corresponds to Yaw and Y corresponds to Pitch | |
const x = ((newYaw / (2 * Math.PI)) * imageWidth) % imageWidth; | |
const y = (((newPitch + Math.PI / 2) / Math.PI) * imageHeight) % imageHeight; | |
return { x, y }; | |
} |