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 插件实现图片延迟加载效果代码
Feb 06 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
Dec 25 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
Mar 12 Javascript
JS实现搜索框文字可删除功能
Dec 28 Javascript
angularjs ocLazyLoad分步加载js文件实例
Jan 17 Javascript
Angularjs按需查询实例代码
Oct 30 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
Feb 03 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
Jul 25 Javascript
JS+HTML5 canvas绘制验证码示例
Dec 05 Javascript
JsonProperty 的使用方法详解
Oct 11 Javascript
vue 项目软键盘回车触发搜索事件
Sep 09 Javascript
Vue Element UI自定义描述列表组件
May 18 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
php批量删除数据
2007/01/18 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
解读PHP中上传文件的处理问题
2016/05/29 PHP
php自动载入类用法实例分析
2016/06/24 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
javascript获取url上某个参数的方法
2013/11/08 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
javascript中数组的多种定义方法和常用函数简介
2014/05/09 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
Node.js制作简单聊天室
2017/01/12 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
2017/02/17 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
python随机生成库faker库api实例详解
2019/11/28 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
Keras load_model 导入错误的解决方式
2020/06/09 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
委托书范文
2014/04/02 职场文书
八达岭长城导游词
2015/01/30 职场文书
元旦主持词开场白
2015/05/29 职场文书
怎样写观后感
2015/06/19 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
无线电知识基础入门篇
2022/02/18 无线电
详解PyTorch模型保存与加载
2022/04/28 Python