web3d-three.js场景设计器-TransformControls模型控制器

场景设计器-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

      });

      }

相关推荐
学习使我变快乐2 分钟前
C++:const成员
开发语言·c++
500了1 小时前
Kotlin基本知识
android·开发语言·kotlin
不知所云,3 小时前
qt cmake自定义资源目录,手动加载资源(图片, qss文件)
开发语言·qt
昨天;明天。今天。3 小时前
案例-表白墙简单实现
前端·javascript·css
安冬的码畜日常3 小时前
【玩转 JS 函数式编程_006】2.2 小试牛刀:用函数式编程(FP)实现事件只触发一次
开发语言·前端·javascript·函数式编程·tdd·fp·jasmine
阑梦清川3 小时前
Java继承、final/protected说明、super/this辨析
java·开发语言
小御姐@stella4 小时前
Vue 之组件插槽Slot用法(组件间通信一种方式)
前端·javascript·vue.js
GISer_Jing4 小时前
【React】增量传输与渲染
前端·javascript·面试
GISer_Jing4 小时前
WebGL在低配置电脑的应用
javascript
PythonFun4 小时前
Python批量下载PPT模块并实现自动解压
开发语言·python·powerpoint