40 lines
1008 B
JavaScript
40 lines
1008 B
JavaScript
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
|
|
|
|
let controls;
|
|
let _canvas;
|
|
const _noCtxMenu = e => e.preventDefault();
|
|
|
|
export function initInteraction(camera, renderer) {
|
|
controls = new OrbitControls(camera, renderer.domElement);
|
|
controls.enableDamping = true;
|
|
controls.dampingFactor = 0.05;
|
|
controls.screenSpacePanning = false;
|
|
controls.minDistance = 5;
|
|
controls.maxDistance = 80;
|
|
controls.maxPolarAngle = Math.PI / 2.1;
|
|
controls.target.set(0, 0, 0);
|
|
controls.update();
|
|
|
|
_canvas = renderer.domElement;
|
|
_canvas.addEventListener('contextmenu', _noCtxMenu);
|
|
}
|
|
|
|
export function updateControls() {
|
|
if (controls) controls.update();
|
|
}
|
|
|
|
/**
|
|
* Dispose OrbitControls event listeners.
|
|
* Called before context-loss teardown.
|
|
*/
|
|
export function disposeInteraction() {
|
|
if (_canvas) {
|
|
_canvas.removeEventListener('contextmenu', _noCtxMenu);
|
|
_canvas = null;
|
|
}
|
|
if (controls) {
|
|
controls.dispose();
|
|
controls = null;
|
|
}
|
|
}
|