@react-vertex/orbit-camera
Version:
Orbit Camera and Controls for React Vertex
50 lines • 2.44 kB
JavaScript
import { useMemo, useEffect } from 'react';
import { useCanvas } from '@react-vertex/core';
import { OrbitCamera } from './OrbitCamera';
import { OrbitControls } from './OrbitControls';
export { OrbitCamera } from './OrbitCamera';
export { OrbitControls } from './OrbitControls';
export function useOrbitCamera() {
var fov = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;
var aspect = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var near = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
var far = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1000;
var configure = arguments.length > 4 ? arguments[4] : undefined;
var memoized = useMemo(function () {
var camera = new OrbitCamera(fov, aspect, near, far);
configure && configure(camera);
return camera;
}, []);
useMemo(function () {
memoized.setProjection(fov, aspect, near, far);
}, [memoized, fov, aspect, near, far]);
return memoized;
}
export function useOrbitControls(camera, configure) {
var canvas = useCanvas();
var memoized = useMemo(function () {
var controls = new OrbitControls(camera, canvas);
configure && configure(controls);
return controls;
}, [camera, canvas]);
useEffect(function () {
canvas.addEventListener('mousedown', memoized.onMouseDown, false);
canvas.addEventListener('mouseup', memoized.onMouseUp, false);
canvas.addEventListener('mousemove', memoized.onMouseMove, false);
canvas.addEventListener('touchstart', memoized.onTouchStart, false);
canvas.addEventListener('touchend', memoized.onTouchEnd, false);
canvas.addEventListener('touchmove', memoized.onTouchMove, false);
canvas.addEventListener('wheel', memoized.onMouseWheel, false);
return function () {
canvas.removeEventListener('mousedown', memoized.onMouseDown, false);
canvas.removeEventListener('mouseup', memoized.onMouseUp, false);
canvas.removeEventListener('mousemove', memoized.onMouseMove, false);
canvas.removeEventListener('touchstart', memoized.onTouchStart, false);
canvas.removeEventListener('touchend', memoized.onTouchEnd, false);
canvas.removeEventListener('touchmove', memoized.onTouchMove, false);
canvas.removeEventListener('wheel', memoized.onMouseWheel, false);
};
}, [canvas, memoized]);
return memoized;
}
//# sourceMappingURL=index.js.map