46 lines
1.3 KiB
JavaScript
46 lines
1.3 KiB
JavaScript
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) => {
|
|
let ratio = 4 * Math.PI / getCanvasSize().width;
|
|
let distance = getDistance();
|
|
|
|
let alpha = (360 * (horizontal * ratio / (2 * Math.PI))) ;
|
|
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);
|
|
}) |