spiral_calendar/view/controls.js

46 lines
1.3 KiB
JavaScript
Raw Normal View History

2023-12-01 12:57:41 +03:00
import { Euler, MathUtils, Quaternion, Vector3 } from "three";
import { getDistance, setDistance, getCameraPosition, setCameraPostion, rotateCamera, getCanvasSize, getCameraRotation, getCameraQuaternion } from "./graphics.js";
let isMousePressed = false
let angle = 0;
const updateCameraPosition = (horizontal, vertical) => {
2023-12-01 14:42:42 +03:00
let ratio = 4 * Math.PI / getCanvasSize().width;
2023-12-01 12:57:41 +03:00
let distance = getDistance();
2023-12-01 14:42:42 +03:00
let alpha = (360 * (horizontal * ratio / (2 * Math.PI))) ;
2023-12-01 12:57:41 +03:00
let betta = MathUtils.degToRad(angle);
let x = Math.cos(betta) * distance;
let z = Math.sin(betta) * distance;
setCameraPostion(x, undefined, z);
angle += alpha;
}
addEventListener('mousedown', (event) => {
if (event.button == 0) {
isMousePressed = true;
}
});
addEventListener('mouseup', (event) => {
if (event.button == 0) {
isMousePressed = false;
}
});
addEventListener('mousemove', (event) => {
if (isMousePressed) {
let horizontal = event.movementX;
let vertical = event.movementY;
updateCameraPosition(horizontal, vertical);
}
});
addEventListener('wheel', (event) => {
let d = getDistance();
console.log(d + d / (event.deltaY/60))
setDistance(d + d / (event.deltaY/60));
updateCameraPosition(0, 0);
})