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>& ...
随机推荐
- MongoDB使用命令创建用户权错误分析--- 权限不够Error:couldn't add user:command createUser requires authentication
MongoDB使用命令创建用户权错误分析 错误一:权限不够Error:couldn't add user:command createUser requires authentication. 解决方 ...
- 判断N是否是质数,为什么判断到根号N就可以了
N=根号N*根号NN的因数除了根号N,其他都是成对存在的, 且必定一个大于根号N一个小于根号N假设N不是质数,有个因数大于根号N(不是N本身) 则N必定有一个与之对应的小于根号N的因数也就是说,如果2 ...
- onJava8学习--java集合
翻翻博客,写了挺多,也学习过这些知识,翻翻脑子,没找到,再来一遍,整理好方便查阅复习. 本次学习内容来自On Java8java编程思想第五版 集合 泛型和类型安全的集合 基本概念 添加 ...
- io中的特殊流Properties
对于去年学习IO的时候一些代码贴上来: 初识properties,因为继承自hashtable,其中可以使用put操作: package special; import java.util.Prope ...
- 免杀生成器之Charlotte解析
一.工具介绍 charlotte是一款Python编写的自动化免杀工具,用来生成免杀的dll文件,在线查杀是1/26报毒,总的来说免杀效果还可以 下载地址:https://github.com/9em ...
- Flink提交流程和架构
一.Flink提交任务的流程 Flink任务提交后,Client向HDFS上传Flink的jar包和配置,之后向Yarn ResourceManager提交任务,ResourceManager分配Co ...
- RabbitMq内存分页
- WIN10 64bit + QT5.10.0(MinGW3.5.0) + OpenCV3.4.1 无痛安装、配置
安装QT和配置MinGW 官方下载qt-opensource-windows-x86-5.10.0.exe 正常步骤安装QT5.10.0,安装过程选择自带的MinGW3.5.0编译器即可. 打开QtC ...
- 阿里云服务器部署mongodb
在阿里云上买了个服务器,部署mongodb遇到一些坑,解决办法也是从网上搜集而来,把零零碎碎的整理记录一下. 服务器是:Alibaba Cloud Linux 下载安装 mongodb官网下载实在是太 ...
- 【CSS】模仿迅雷主页的按钮
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...