场景设计器-TransformControls 控制器
translate? --移动模式
rotate? -- 旋转模式
scale -- 缩放模式
方便布局过程中快捷对模型进行摆放操作。
引入方式
import { TransformControls } from 'three/examples/jsm/controls/TransformControls.js';
使用方式
?// 对TransformControls的使用
? ? ? this.transformControls = new TransformControls(this.camera, this.renderer.domElement);
? ? ? this.scene.add(this.transformControls);
选取操作
? ?// 模型移动
? ? initChange(transformControls) {
? ? var changeRaycaster = new THREE.Raycaster();
? ? var changeMouse = new THREE.Vector2();
? ? this.renderer.domElement.addEventListener('click', ?(event)=> {
? ? ? ? changeMouse.x = (event.offsetX / this.renderer.domElement.clientWidth) * 2 - 1;
? ? ? ? changeMouse.y = -(event.offsetY / ?this.renderer.domElement.clientHeight) * 2 + 1;
? ? ? ? changeRaycaster.setFromCamera(changeMouse, this.camera);
? ? ? ? var intersects = changeRaycaster.intersectObjects(this.modelsArray); ?//
? ? ? ? // console.log('相机的模型', intersects, intersects.length);
? ? ? ? if (intersects.length > 0) {
? ? ? ? ? ? var selectedObject = intersects[0].object;
? ? ? ? ? ? transformControls.attach(selectedObject);
? ? ? ? ? ? // 为移动模式
? ? ? ? ? ? transformControls.setMode("translate");
? ? ? ? ? ? // 为旋转模式
? ? ? ? ? ? //transformControls.setMode("rotate");
? ? ? ? ? ? // 为缩放模式
? ? ? ? ? ? //transformControls.setMode("scale");
? ? ? ? } else {
? ? ? ? ? ? // 如果点击的不是模型,那么解除模型与TransformControls的附加
? ? ? ? ? ? transformControls.detach();
? ? ? ? }
? ? });
?
? ? transformControls.addEventListener('dragging-changed', ?(event)=> {
? ? ? ? this.controls.enabled = !event.value;
? ? ? ? //mapControls.enabled = !event.value; ?// 如果TransformControls正在拖动,则禁用MapControls
? ? });
}