Three.js获取鼠标点击的三维坐标示例代码


Posted in Javascript onMarch 24, 2017

由于工作需要,但是对于three.js又是一窍不通,网上的资料又很少,所以上来就让我获取坐标,真是一个头两个大。好歹最后终于实现了。

既然已经是想要获取鼠标点击的三维坐标了,相信你camera对象和scene都已经有了,如果不了解的小伙伴,可以先去看一下这两个对象。这里主要说一下怎么获取到三维坐标,原理性的东西不提。上代码:

function onDocumentMouseDown( event ) {
  event.preventDefault();
  var vector = new THREE.Vector3();//三维坐标对象
  vector.set(
    ( event.clientX / window.innerWidth ) * 2 - 1,
    - ( event.clientY / window.innerHeight ) * 2 + 1,
    0.5 );
  vector.unproject( camera );
  var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());
  var intersects = raycaster.intersectObjects(scene.children);
  if (intersects.length > 0) {
    var selected = intersects[0];//取第一个物体
    console.log("x坐标:"+selected.point.x);
    console.log("y坐标:"+selected.point.y);
    console.log("z坐标:"+selected.point.z);
  }

我理解的就是鼠标点击的时候屏幕收到的是二维坐标,这个二维坐标和相机连线,在视角的方向上延伸,形成一条射线,这条射线会和场景中的物体相交,接收这些相交的所有物体,第一个物体就是离相机最近的,最后一个就是离相机最远的。一般就把第一个相交的物体作为鼠标点击的物体。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于Jquery的跨域传输数据(JSONP)
Mar 10 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
Feb 12 Javascript
Javascript中设置默认参数值示例
Sep 11 Javascript
js实现文本框支持加减运算的方法
Aug 19 Javascript
JS获取文件大小方法小结
Dec 08 Javascript
jQuery图片加载显示loading效果
Nov 04 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
Jan 22 Javascript
js单页hash路由原理与应用实战详解
Aug 14 Javascript
vue 解决数组赋值无法渲染在页面的问题
Oct 28 Javascript
js实现拾色器插件(ColorPicker)
May 21 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
Dec 29 Javascript
vue中 this.$set的使用详解
Nov 17 Vue.js
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
Mar 24 #jQuery
Node.js和Express简单入门介绍
Mar 24 #Javascript
js鼠标经过tab选项卡时实现切换延迟
Mar 24 #Javascript
详解angular2实现ng2-router 路由和嵌套路由
Mar 24 #Javascript
JS实现向iframe中表单传值的方法
Mar 24 #Javascript
JS正则替换去空格的方法
Mar 24 #Javascript
原生js封装自定义滚动条
Mar 24 #Javascript
You might like
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
JS记录用户登录次数实现代码
2014/01/15 Javascript
js字符串日期yyyy-MM-dd转化为date示例代码
2014/03/06 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
python中的字典详细介绍
2014/09/18 Python
Python实现Const详解
2015/01/27 Python
Django中使用Celery的教程详解
2018/08/24 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
Python写一个基于MD5的文件监听程序
2019/03/11 Python
python三大神器之fabric使用教程
2019/06/10 Python
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
军训自我鉴定怎么写
2014/02/13 职场文书
实用的简历自我评价
2014/03/06 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
医院科室评语
2015/01/04 职场文书
开学第一周值周总结
2015/07/16 职场文书
高中物理教学反思
2016/02/19 职场文书
SQL语句多表联合查询的方法示例
2022/04/18 MySQL
Docker安装MySql8并远程访问的实现
2022/07/07 Servers
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js