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 相关文章推荐
div移动 输入框不能输入的问题
Nov 19 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
Oct 17 Javascript
原生javascript实现隔行换色
Jan 04 Javascript
Javascript中的arguments与重载介绍
Mar 15 Javascript
原创jQuery弹出层插件分享
Apr 02 Javascript
js面向对象之公有、私有、静态属性和方法详解
Apr 17 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
Jun 03 Javascript
JavaScript ES6中CLASS的使用详解
Nov 22 Javascript
Vue实现路由跳转和嵌套
Jun 20 Javascript
JavaScript常用事件介绍
Jan 21 Javascript
JS实现手写 forEach算法示例
Apr 29 Javascript
通过实例解析javascript Date对象属性及方法
Nov 04 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获取数组长度的方法(有实例)
2013/10/27 PHP
PHP CodeIgniter框架的工作原理研究
2015/03/30 PHP
JavaScript关于select的相关操作说明
2010/01/13 Javascript
js创建子窗口并且回传值示例代码
2013/07/02 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
AngularJS学习笔记之ng-options指令
2015/06/16 Javascript
jQuery实现图片轮播特效代码分享
2015/09/15 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
2016/07/08 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
详解JWT token心得与使用实例
2019/08/02 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
python发送邮件接收邮件示例分享
2014/01/21 Python
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
python 网络编程常用代码段
2016/08/28 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
Python 处理图片像素点的实例
2019/01/08 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
如何用python 操作zookeeper
2020/12/28 Python
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
网站开发实习生的自我评价
2013/12/11 职场文书
学生打架检讨书1000字
2014/01/16 职场文书
党风廉政承诺书
2014/03/27 职场文书
《忆江南》教学反思
2014/04/07 职场文书
篮球拉拉队口号
2015/12/25 职场文书
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS