three DragControls(拖拽整个模型)
第一步:必须让模型添加到一个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(拖拽整个模型)相关推荐
- threejs 实现模型拖拽功能
导入相关插件 import {DragControls} from "three/examples/jsm/controls/DragControls"; //拖拽控件import ...
- 2 拖拽模型_3Dmax插件 | 螺丝钉、挖洞、网格模型等可以分分钟搞定
今天给大家带来3Dmax插件Mesh Insert v1.14 Mesh Insert是一款3dsmax建模插件,灵感来自Polystein for Modo.它通过替换库中模型资源快速插入到模型表面 ...
- unity3d鼠标拖拽模型,旋转模型
直接挂载到模型上 using UnityEngine; using System.Collections;public class OnDrag : MonoBehaviour {//目标物体publ ...
- Qt工作笔记-在QTreeView上实现模型数据的拖拽
运行截图如下: 逻辑是: 1.QTreeView开发拖拽功能. 2.在自定义模型中重写 flags(const QModelIndex &index) const mimeData(const ...
- 原生JS拖拽模型(有限制范围的)
原生拖拽模型(有限制范围的) 思路: 确定盒子的移动的方式 1. 定位的left top值可以让盒子移动 2.直接margin 顶(在文档流中,不建议) 父元素的padding顶 (更加不建议 ...
- AE 超人飞天特效 地面震裂崩飞效果 。SU 可以快速建立模型。室内室外。通过将CAD 的图拖拽 拉伸成面
今天完成 工资结算发放. 继续TX PDF AE 超人飞天特效 地面震裂崩飞效果 人中枪弹爆头效果 需要相关素材, 比如地面震裂 崩飞 的素材 枪弹 的血液飞溅的素材等 跟踪,动态模糊,快速模糊, ...
- UE4房产应用虚拟样板间功能演示 | 3D箭头移动 | 材质替换 | 模型拖拽移动 - Unreal Engine 4
功能列表: 1.Runtime 3D Gizmo, 支持模型拖拽移动.旋转功能 2.材质替换功能 3.模型管理:创建家具.家具库.材质库可以动态编辑和更新 4.场景保存.清空.截图功能 5.支持正常模 ...
- 3dmax java_Java3D读取3DMax模型并实现鼠标拖拽、旋转、滚轮缩放等功能
/**-------------------------------------------------代码区--------------------------------------------- ...
- Unity 3D模型展示之拖拽
效果展示 拖拽可操作的元件 选中操作元件,挂载拖拽脚本SwitchDrag .鼠标左键按住进行拖拽,鼠标右键接触拖拽. using cakeslice; using UnityEngine;publi ...
最新文章
- 15、如何选择MySQL存储引擎
- win8计算机安全模式,安全模式,详细教您Win8怎么进入安全模式
- Springboot 使用Mybatis对postgreSQL实现CRUD
- 开启log4net内部调试
- 从头学习DirectDraw
- 前端监控和前端埋点方案设计
- 拓端tecdat|R语言异方差回归模型建模:用误差方差解释异方差
- 数字图像处理 冈萨雷斯 第三版 书中配套图片下载地址
- 计算机中丢失MSVCR120.dll,电脑找不到MSVCR120.dll怎么办
- L2-023 图着色问题 (25 分c++代码)
- 聚力赋能·共享共创|吉鼎科技与厦门6大高校“敏捷开发教学研讨会”圆满成功!
- 企业网站新闻显示页面(HTML+CSS)
- 从今天起 一周至少看一本书 不能再蹉跎
- android极光推送no bit-32,iOS极光推送详解以及碰到问题和解决方式
- 二进制 算法相关的题目
- 汽车模具设计与制造能力状况
- DaVinci:色轮
- python豆瓣历史评分_基于Python的豆瓣电影评分查询器
- 读 <<详解FPGA 人工只能时代的驱动引擎>>
- 黑屏?白屏?蓝屏?整理戴尔G3在使用过程中遇到的,一些强制关机重启就能解决的问题
热门文章
- urlencode编码问题(以及urlparse)
- 退出整个Android程序的工具类
- 使用XmlWriter写XML文件
- POJ1979(DFS)
- 几种常见的数据库连接的URL写法(包括国产数据达梦DM)
- Cache 和 Buffer 有什么区别
- 2d头发_3D打印毛囊突破性进展!“头发工厂”将成秃顶的救星
- 解决默写浏览器中点击input输入框时,placeholder的值不消失的方法
- 【问题解决】线程间操作无效:从不是创建控件“textBox1”的线程访问它
- “MySQL 服务正在启动 . MySQL 服务无法启动。 服务没有报告任何错误。”的解决方案