第一步:必须让模型添加到一个group里面去

注意:因为我的代码是自己封装了的,看到editor.scene.scene.add与scene.add等价

let transformControls = new TransformControls(editor.scene.camera, editor.scene.renderer.domElement)editor.scene.scene.add(transformControls)let objects=[]let dragControls= new DragControls(objects,editor.scene.camera, editor.scene.renderer.domElement)dragControls.addEventListener('dragstart', function (event) {console.log(111)// event.object.parent.position.copy(event.object.position)editor.scene.controls.enabled = falsetransformControls.attach(event.object)});dragControls.addEventListener('dragend', function (event) {event.object.parent.position.copy(event.object.position)editor.scene.controls.enabled = truetransformControls.detach(event.object)});let mesh1=new THREE.Mesh(new THREE.BoxGeometry(5,5,5),new THREE.MeshPhongMaterial())let mesh2=new THREE.Mesh(new THREE.BoxGeometry(5,5,5),new THREE.MeshPhongMaterial())mesh2.position.x=5let groupEq=new THREE.Group()groupEq.add(mesh1,mesh2)objects.push(groupEq)editor.scene.scene.add(groupEq)

第二步:因为监听的事件是dragstart,所以把dragstart复制。然后打开你引用的DragControls的源文件,ctrl+F找到dragstart的位置。监听的对象是_selected,找到他的位置,然后给_intersections[ 0 ].object加上.parent。它会获取到你的group那一层,所以你拖拽的就是包含模型的group。注意:如果看不懂DragControls源码你就先去查下THREE.Raycaster这个东西

function onDocumentMouseDown( event ) {event.preventDefault();_intersections.length = 0;_raycaster.setFromCamera( _mouse, _camera );_raycaster.intersectObjects( _objects, true, _intersections );if ( _intersections.length > 0 ) {//需要修改代码的位置_selected = ( scope.transformGroup === true ) ? _objects[ 0 ] : _intersections[ 0 ].object.parent;if ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {_inverseMatrix.getInverse( _selected.parent.matrixWorld );_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );}_domElement.style.cursor = 'move';scope.dispatchEvent( { type: 'dragstart', object: _selected } );}}

three DragControls(拖拽整个模型)相关推荐

  1. threejs 实现模型拖拽功能

    导入相关插件 import {DragControls} from "three/examples/jsm/controls/DragControls"; //拖拽控件import ...

  2. 2 拖拽模型_3Dmax插件 | 螺丝钉、挖洞、网格模型等可以分分钟搞定

    今天给大家带来3Dmax插件Mesh Insert v1.14 Mesh Insert是一款3dsmax建模插件,灵感来自Polystein for Modo.它通过替换库中模型资源快速插入到模型表面 ...

  3. unity3d鼠标拖拽模型,旋转模型

    直接挂载到模型上 using UnityEngine; using System.Collections;public class OnDrag : MonoBehaviour {//目标物体publ ...

  4. Qt工作笔记-在QTreeView上实现模型数据的拖拽

    运行截图如下: 逻辑是: 1.QTreeView开发拖拽功能. 2.在自定义模型中重写 flags(const QModelIndex &index) const mimeData(const ...

  5. 原生JS拖拽模型(有限制范围的)

    原生拖拽模型(有限制范围的) 思路: 确定盒子的移动的方式 ​ 1. 定位的left top值可以让盒子移动 ​ 2.直接margin 顶(在文档流中,不建议) 父元素的padding顶 (更加不建议 ...

  6. AE 超人飞天特效 地面震裂崩飞效果 。SU 可以快速建立模型。室内室外。通过将CAD 的图拖拽 拉伸成面

    今天完成 工资结算发放. 继续TX PDF AE 超人飞天特效  地面震裂崩飞效果 人中枪弹爆头效果 需要相关素材, 比如地面震裂 崩飞 的素材 枪弹 的血液飞溅的素材等 跟踪,动态模糊,快速模糊, ...

  7. UE4房产应用虚拟样板间功能演示 | 3D箭头移动 | 材质替换 | 模型拖拽移动 - Unreal Engine 4

    功能列表: 1.Runtime 3D Gizmo, 支持模型拖拽移动.旋转功能 2.材质替换功能 3.模型管理:创建家具.家具库.材质库可以动态编辑和更新 4.场景保存.清空.截图功能 5.支持正常模 ...

  8. 3dmax java_Java3D读取3DMax模型并实现鼠标拖拽、旋转、滚轮缩放等功能

    /**-------------------------------------------------代码区--------------------------------------------- ...

  9. Unity 3D模型展示之拖拽

    效果展示 拖拽可操作的元件 选中操作元件,挂载拖拽脚本SwitchDrag .鼠标左键按住进行拖拽,鼠标右键接触拖拽. using cakeslice; using UnityEngine;publi ...

最新文章

  1. 15、如何选择MySQL存储引擎
  2. win8计算机安全模式,安全模式,详细教您Win8怎么进入安全模式
  3. Springboot 使用Mybatis对postgreSQL实现CRUD
  4. 开启log4net内部调试
  5. 从头学习DirectDraw
  6. 前端监控和前端埋点方案设计
  7. 拓端tecdat|R语言异方差回归模型建模:用误差方差解释异方差
  8. 数字图像处理 冈萨雷斯 第三版 书中配套图片下载地址
  9. 计算机中丢失MSVCR120.dll,电脑找不到MSVCR120.dll怎么办
  10. L2-023 图着色问题 (25 分c++代码)
  11. 聚力赋能·共享共创|吉鼎科技与厦门6大高校“敏捷开发教学研讨会”圆满成功!
  12. 企业网站新闻显示页面(HTML+CSS)
  13. 从今天起 一周至少看一本书 不能再蹉跎
  14. android极光推送no bit-32,iOS极光推送详解以及碰到问题和解决方式
  15. 二进制 算法相关的题目
  16. 汽车模具设计与制造能力状况
  17. DaVinci:色轮
  18. python豆瓣历史评分_基于Python的豆瓣电影评分查询器
  19. 读 <<详解FPGA 人工只能时代的驱动引擎>>
  20. 黑屏?白屏?蓝屏?整理戴尔G3在使用过程中遇到的,一些强制关机重启就能解决的问题

热门文章

  1. urlencode编码问题(以及urlparse)
  2. 退出整个Android程序的工具类
  3. 使用XmlWriter写XML文件
  4. POJ1979(DFS)
  5. 几种常见的数据库连接的URL写法(包括国产数据达梦DM)
  6. Cache 和 Buffer 有什么区别
  7. 2d头发_3D打印毛囊突破性进展!“头发工厂”将成秃顶的救星
  8. 解决默写浏览器中点击input输入框时,placeholder的值不消失的方法
  9. 【问题解决】线程间操作无效:从不是创建控件“textBox1”的线程访问它
  10. “MySQL 服务正在启动 . MySQL 服务无法启动。 服务没有报告任何错误。”的解决方案