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中实现简单的tabs插件功能的代码
Mar 02 Javascript
js实现数组转换成json
Jun 26 Javascript
Javascript简单实现面向对象编程继承实例代码
Nov 27 Javascript
简单实现js页面切换功能
Jan 10 Javascript
解析微信JS-SDK配置授权,实现分享接口
Dec 09 Javascript
angularJS 指令封装回到顶部示例详解
Jan 22 Javascript
关于使用js算总价的问题
Jun 23 Javascript
微信小程序商品详情页的底部弹出框效果
Nov 16 Javascript
解决Layui 表单提交数据为空的问题
Aug 15 Javascript
基于vue-upload-component封装一个图片上传组件的示例
Oct 16 Javascript
详解Element 指令clickoutside源码分析
Feb 15 Javascript
js实现随机点名器精简版
Jun 29 Javascript
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
使用PHP 5.0创建图形的巧妙方法
2010/10/12 PHP
解析如何去掉CodeIgniter URL中的index.php
2013/06/25 PHP
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
JS简单的图片放大缩小的两种方法
2013/11/11 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
js面向对象的写法
2016/02/19 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
Python语法分析之字符串格式化
2019/06/13 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
应届生服装设计自我评价
2013/09/20 职场文书
优秀应届毕业生自荐信
2013/11/16 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
任命通知范文
2015/04/21 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
培训心得体会怎么写
2016/01/25 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript
Python基础之tkinter图形化界面学习
2021/04/29 Python
基于JavaScript实现省市联动效果
2021/06/22 Javascript
Redis Lua脚本实现ip限流示例
2022/07/15 Redis