// src/utils/three/controls/orbitControls.js import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'; /** * 设置轨道控制器 * @param {THREE.Camera} camera - 相机实例 * @param {HTMLElement} domElement - 渲染器的DOM元素 * @param {Object} [config={}] - 控制器配置 * @returns {OrbitControls} 轨道控制器实例 */ export const setupControls = (camera, domElement, config = {}) => { const controls = new OrbitControls(camera, domElement); // 默认配置 const defaultConfig = { enableDamping: true, dampingFactor: 0.05, minDistance: 1, maxDistance: 100, maxPolarAngle: Math.PI, minPolarAngle: 0, enablePan: true, enableZoom: true, enableRotate: true }; // 合并配置 const mergedConfig = { ...defaultConfig, ...config }; // 应用配置 Object.keys(mergedConfig).forEach(key => { if (controls[key] !== undefined) { controls[key] = mergedConfig[key]; } }); // 禁用右键菜单 domElement.addEventListener('contextmenu', (e) => e.preventDefault()); return controls; }; /** * 更新控制器配置 * @param {OrbitControls} controls - 轨道控制器实例 * @param {Object} config - 新配置 */ export const updateControls = (controls, config) => { if (!controls) return; Object.keys(config).forEach(key => { if (controls[key] !== undefined) { controls[key] = config[key]; } }); }; /** * 销毁控制器 * @param {OrbitControls} controls - 轨道控制器实例 */ export const disposeControls = (controls) => { if (controls) { controls.dispose(); } }; // 统一导出 export default { setupControls, updateControls, disposeControls };