three.js 模型拖动之DragControls控制器
需求:
拖动场景内的模型
方案:
增加控制器DragControls
1、引入控制器
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
import { TransformControls } from "three/examples/jsm/controls/TransformControls";
import { DragControls } from "three/examples/jsm/controls/DragControls";
2、加载控制器
获取场景内模型列表 ——》
var objects = [];
for (let i = 0; i < this.scene.children.length; i++) {
if (this.scene.children[i].isMesh) {
objects.push(this.scene.children[i]);
}
}
加载控制器TransformControls ——》
加载控制器DragControls ——》
this.transformControls = new TransformControls(this.camera, this.renderer.domElement);
this.scene.add(this.transformControls)
this.dragControls = new DragControls(objects, this.camera, this.renderer.domElement);
3、更改模型位置 ——》
可选监听:
dragstart 开始移动
drag
dragend 结束移动
hoveron 鼠标进入模型
hoveroff 鼠标离开模型
this.dragControls.addEventListener('hoveron', function( event ){
self.orbitControls.enabled = false
self.changeMaterial(event.object)
console.log(event.object)
self.transformControls.attach(event.object);
self.transformControls.setSize(0.4);
});
createevent() {
// 事件管理、操作控制器 ,旋转控件
this.orbitControls = new OrbitControls(
this.camera,
this.renderer.domElement
);
// this.controls = new TrackballControls(this.camera, this.renderer.domElement); // 轨迹球控件
// // controls.noRotate = true;
// this.controls.noPan = true;
// // 视角最小距离
// this.controls.minDistance = 1000;
// // 视角最远距离
// this.controls.maxDistance = 5000;
this.orbitControls.enableDamping = true;
this.orbitControls.maxDistance = 1000;
this.orbitControls.minDistance = 1;
this.transformControls = new TransformControls(this.camera, this.renderer.domElement);
this.scene.add(this.transformControls)
var objects = [];
for (let i = 0; i < this.scene.children.length; i++) {
if (this.scene.children[i].isMesh) {
objects.push(this.scene.children[i]);
}
}
this.dragControls = new DragControls(objects, this.camera, this.renderer.domElement);
var self = this
this.dragControls.addEventListener('dragstart', function (event) { //
// this.controls.enabled = false;
});
// 拖拽结束
this. dragControls.addEventListener('dragend', function (event) {
// this.controls.enabled = true;
});
this.dragControls.addEventListener('hoveron', function( event ){ //选中模型
self.orbitControls.enabled = false // 关闭orbitControls 控制器
self.changeMaterial(event.object)
console.log(event.object)
self.transformControls.attach(event.object);
self.transformControls.setSize(0.4);
});
this.dragControls.addEventListener('hoveroff',function(event){ 离开模型
self.modelnumber = event.object.position
self.orbitControls.enabled = true //启动orbitControls 控制器
}) },
three.js 模型拖动之DragControls控制器的更多相关文章
- [.net 面向对象程序设计深入](6).NET MVC 6 —— 模型、视图、控制器、路由等的基本操作
[.net 面向对象程序设计深入](6).NET MVC 6 —— 模型.视图.控制器.路由等的基本操作 1. 使用Visual Studio 2015创建Web App (1)文件>新建> ...
- JS实现拖动div层移动
JS实现拖动div层移动 在谈到拖动div层之前,我们有必要来了解下 下面JS几个属性的区别---- pageX,pageY,layerX,layerY,clientX,clientY,screen ...
- MVC(Model(模型) View(视图) Controller(控制器))
复习 1. 商品表 增删改查 index.php add.php view.php edit.php action.php 2. MVC(Model(模型) Vie ...
- 深入理解模型,视图和控制器(C#)
这篇文章向你提供ASP.NET MVC 模型,视图和控制的高度概览.换句话说,解释一下ASP.NET MVC中的 ‘M’, ‘V’, 和 ‘C’. 看完这篇文章以后,你应该就能理解ASP.NET MV ...
- 原生JS实现拖动滑块验证登录效果
♀分享一组利用原生JS实现拖动滑块验证效果 ♀在这个组代码中涉及三个方面的知识: ⑴事件处理 ⑵添加验证标记 ⑶选择器的封装 代码如下: <!DOCTYPE html> <htm ...
- angular.js 中的作用域 数据模型 控制器
1.angular.js 作为后起之秀的前端mvc框架,他于传统的前端框架都不同,我们再也不需要在html中嵌入脚本来操作对象了.它抽象出了数据模型,控制器及视图. 成功解耦了应用逻辑,数据模型,视图 ...
- three.js模型
Three.js有一系列导入外部文件的辅助函数,是在three.js之外的,使用前需要额外下载, 在https://github.com/mrdoob/three.js/tree/master/exa ...
- js实现拖动验证码
效果图: Index.html <!DOCTYPE html> <html lang="en"> <head> <meta http-eq ...
- js窗口拖动 模版
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
随机推荐
- ASP.NET Core:依赖注入
ASP.NET Core的底层设计支持和使用依赖注入.ASP.NET Core应用程序可以利用内置的框架服务将它们注入到启动类的方法中,并且应用程序服务能够配置注入.由ASP.NET Core提供的默 ...
- WebAPI中controller添加[AllowAnonymous]无效的解决方法
对于Methods添加[AllowAnonymous]可以进行匿名访问,但是对于Controller添加时无效 public class AuthAttribute : AuthorizationFi ...
- 快速创建Spring web项目
第一步,把包和文件夹建好 第二步.pom文件添加依赖 放到properties标签内 <spring_version>4.1.2.RELEASE</spring_version> ...
- Spring PropertyPlaceholderConfigurer 自定义扩展
原文地址:https://blog.csdn.net/feiyu8607/article/details/8282893 Spring中PropertyPlaceholderConfigurer这个类 ...
- 理解java调试的工作目录 working directory
原文链接使用idea或者eclipse进行调试的时候会有Working directory配置: 我们创建工程,IDE会自动创建一个工程目录,假设工程名称为:TestProject,那么在会创建一个目 ...
- 交互式查询⼯具Impala
Impala是什么: Impala是Cloudera提供的⼀款开源的针对HDFS和HBASE中的PB级别数据进⾏交互式实时查询(Impala 速度快),Impala是参照⾕歌的新三篇论⽂当中的Drem ...
- CodeReview杂谈
豆皮粉儿们,大家好,又见面啦,今天由字节跳动的"躬冯"带来一个 code review 的故事. 作者:躬冯 2020年元旦假期到来的时候,孙总攒了个局,又把当年一起创造过屎山的咱 ...
- Mybatis-plus<二>通用CRUD,分页
Mybatis-plus<二>通用CRUD,分页 与博客Mybatis-plus<一>为同一个Springboot项目. Demo GitHub下载地址:https://git ...
- 痞子衡嵌入式:在MDK开发环境下将关键函数重定向到RAM中执行的几种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在MDK开发环境下将关键函数重定向到RAM中执行的几种方法. 这个关键函数重定向到 RAM 中执行系列文章,痞子衡已经写过 <IA ...
- openswan协商流程之(七):main_inR3
主模式第六包(收包):main_inR3 1. 序言 main_inR3()函数是ISAKMP协商过程中第一阶段的最后一个报文的接收处理函数,它的作用同main_inI3_outR3()部分功能相同: ...