react-native-filament
Version:
A real-time physically based 3D rendering engine for React Native
44 lines • 2.14 kB
JavaScript
import { useFilamentContext } from './useFilamentContext';
import { useDisposableResource } from './useDisposableResource';
const cameraPosition = [0, 0, 8];
const cameraTarget = [0, 0, 0];
const cameraUp = [0, 1, 0];
export function useCameraManipulator({
orbitHomePosition = cameraPosition,
targetPosition = cameraTarget,
upVector = cameraUp,
...config
}) {
var _config$zoomSpeed, _config$orbitSpeed, _config$orbitSpeed2;
const {
engine
} = useFilamentContext();
const orbitHomePositionX = orbitHomePosition[0];
const orbitHomePositionY = orbitHomePosition[1];
const orbitHomePositionZ = orbitHomePosition[2];
const targetPositionX = targetPosition[0];
const targetPositionY = targetPosition[1];
const targetPositionZ = targetPosition[2];
const upVectorX = upVector[0];
const upVectorY = upVector[1];
const upVectorZ = upVector[2];
const zoomSpeed = (_config$zoomSpeed = config.zoomSpeed) === null || _config$zoomSpeed === void 0 ? void 0 : _config$zoomSpeed[0];
const orbitSpeedX = (_config$orbitSpeed = config.orbitSpeed) === null || _config$orbitSpeed === void 0 ? void 0 : _config$orbitSpeed[0];
const orbitSpeedY = (_config$orbitSpeed2 = config.orbitSpeed) === null || _config$orbitSpeed2 === void 0 ? void 0 : _config$orbitSpeed2[1];
const cameraManipulator = useDisposableResource(() => {
const localConfig = {
orbitHomePosition: [orbitHomePositionX, orbitHomePositionY, orbitHomePositionZ],
targetPosition: [targetPositionX, targetPositionY, targetPositionZ],
upVector: [upVectorX, upVectorY, upVectorZ]
};
if (zoomSpeed != null) {
localConfig.zoomSpeed = [zoomSpeed];
}
if (orbitSpeedX != null && orbitSpeedY != null) {
localConfig.orbitSpeed = [orbitSpeedX, orbitSpeedY];
}
return Promise.resolve(engine.createOrbitCameraManipulator(localConfig));
}, [engine, orbitHomePositionX, orbitHomePositionY, orbitHomePositionZ, orbitSpeedX, orbitSpeedY, targetPositionX, targetPositionY, targetPositionZ, upVectorX, upVectorY, upVectorZ, zoomSpeed]);
return cameraManipulator;
}
//# sourceMappingURL=useCameraManipulator.js.map