在做网格对象拖放时,需要创建一个不可见的参考平面,如果将平面对象设置为visible,则射线对象无法获取该平面,就无法进行位置计算。

onDocumentMouseMove: function (e) {
var event = e || window.event;
var mouse = new THREE.Vector2();
mouse.x = (event.clientX / map3d.width) * 2 - 1;//标准设备横坐标
mouse.y = -(event.clientY / map3d.height) * 2 + 1;//标准设备纵坐标
// 通过摄像机和鼠标位置更新射线
map3d.raycaster.setFromCamera(mouse, map3d.camera); if (map3d.selection && e.which == 1) {
//移动物体
var intersects = map3d.raycaster.intersectObject(map3d.hidePlane);
var position = intersects[0].point.sub(map3d.offset);
map3d.selection.position.set(parseFloat(position.x.toFixed(2)),parseFloat(position.y.toFixed(2)),parseFloat(position.z.toFixed(2)));
} else {
//1:如果聚焦到了需要移动位置的物体上
var intersects = map3d.raycaster.intersectObjects(map3d.objects);
if (intersects.length > 0) {
//让参考平面的中心点移动到物体的位置
map3d.hidePlane.position.copy(intersects[0].object.position);
}
},

  这时候可以将网格对象的材质的visible属性设置为false

// 辅助移动物体
this.hidePlane = new THREE.Mesh(
new THREE.PlaneBufferGeometry(500, 500, 8, 8),
new THREE.MeshBasicMaterial({ color: 0xffffff, visible: false})
);
this.hidePlane.needsUpdate=true;
this.scene.add(this.hidePlane);
this.raycaster = new THREE.Raycaster();
this.offset = new THREE.Vector3();

three.js的raycaster射线无法获取visible为false的网格对象的更多相关文章

  1. three.js的组合与合并,raycaster射线无法获取group

    1.组合 创建一个组非常简单,在组中添加子元素的效果是,你可以对组进行移动.缩放和变形,而所有的子对象都会受到影响.使用组的时候,你依然可以引用.修改每一个单独的几何体.但是,使用raycaster射 ...

  2. three.js raycaster射线碰撞的坑 (当canvas大小 不是屏幕大小是解决拾取物体的办法)

    这里只是记录一下坑,方便查阅,内容主要援引自:three.js Raycaster 射线拾取 canvas不占满整屏时射线拾取存在偏差 1. 世界坐标系: 世界坐标系位于屏幕的中心(0,0,0),往右 ...

  3. JS中isPrototypeOf 和hasOwnProperty 的区别 ------- js使用in和hasOwnProperty获取对象属性的区别

    JS中isPrototypeOf 和hasOwnProperty 的区别 1.isPrototypeOf isPrototypeOf是用来判断指定对象object1是否存在于另一个对象object2的 ...

  4. JS(原生js和jq方式)获取元素属性(自定义属性),删除属性(自定义属性)

    JS(原生js和jq方式)获取元素属性(自定义属性),删除属性(自定义属性) 以下内容: 一.获取元素的属性 二.设置元素的属性 三.删除元素的属性 一.获取元素的属性 1-原生JS 获取属性 .ge ...

  5. 【转】js中通过docment.cookie获取到的内容不完整! 在浏览器的application里的cookie里可以看到完整的cookie,个别字段无法通过document.cookie获取。 是否有其他办法可以获取到??

    js中通过docment.cookie获取到的内容不完整!在浏览器的application里的cookie里可以看到完整的cookie,个别字段无法通过document.cookie获取.是否有其他办 ...

  6. VUE.JS 窗口发生变化时,获取当前窗口的高度。

    VUE.JS # 窗口发生变化时,获取当前窗口的高度. mounted () { const that = this; window.onresize = () => { return (() ...

  7. js获取事件源及触发该事件的对象

    怎样获取事件源及触发该事件的对象,方法有非常多,js中能够通过event来实现.以下有个不错的演示样例,感兴趣的朋友能够參考下: function myfunction(event) { event ...

  8. js进阶 11-8 jquery如何获取元素相对于父元素的位置

    js进阶 11-8  jquery如何获取元素相对于父元素的位置 一.总结 一句话总结:用jquery的position方法,但是使用这个方法的前提是父元素相对定位,子元素绝对定位,否则和offset ...

  9. js进阶 11-7 jquery如何获取和改变元素的位置

    js进阶 11-7  jquery如何获取和改变元素的位置 一.总结 一句话总结:jquery中匿名函数中的index参数是什么意思.jquery对象多集合,故index为所选元素的下标. 1.jqu ...

随机推荐

  1. ASP.NET项目答辩系统课件使用中的问题记录

    使用软件:VS2008 模块一:登录模块 1-08 问题:显示属性“background”不是元素"td"的有效属性 解决:style="background-image ...

  2. 2018-计算机系机试(第二批)-C-数字字符个数

    C. 数字字符个数 单点时限: 1.0 sec 内存限制: 256 MB 输入一行信息,输出其中包含的数字字符个数. 例如:输入 a<4 >w,输出 1 . 输入格式 一行字符串 (可能含 ...

  3. for语句,range() 函式

    for 语句在任意序列 (列表或者字符串) 中迭代时, 总是按照元素在序列中的出现顺序依次迭代. 2 ... a = ['cat', 'window', 'defenestrate']3 >&g ...

  4. libnids校验和引起回放包不能正常捕捉

    如题 取消校验和校验即可: struct nids_chksum_ctl temp;temp.netaddr = 0;temp.mask = 0;temp.action = 1;nids_regist ...

  5. angular6 引用echart第一次数据不显示解决

    1 使用promise从后台返回数据后,页面还是比数据更快的加载出来,导致echart图页面加载的时候不显示问题 1.1 html <div echarts [options]="do ...

  6. 微信小程序生成二维码工具

    实现的效果 使用(非自适应) 完整代码请参考网址里https://github.com/tomfriwel/weapp-qrcode 页面wxml中放置绘制二维码的canvas: <canvas ...

  7. 各类排序算法的实现C#版

    using System;using System.CodeDom;using System.Collections.Generic;using System.Linq;using System.Ru ...

  8. ubuntu18安装navicat

    1.登陆 http://www.navicat.com.cn/download/navicat-for-mysql 页面下载navicat安装包,务必选位置1-64bit ps: 中文版乱码问题严重, ...

  9. 安装Scala开发环境

    Scala 介绍 Step 1: 安装 Java开发环境 Scala 版本与Java版本的兼容关系 从Oracle网站下载JDK URL: http://www.oracle.com/technetw ...

  10. 黑an网络---an网入门

    我认为学网络的会上an网也是一项必备的技能,我不是鼓励你去犯罪而是保护自己的个人隐私免遭被侵害.an网和shen网实际上都是从英文翻译来的,an网即Dark Net或Dark Web,shen网则译为 ...