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获取地址栏参数插件(模仿C#)
Oct 26 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
Jun 22 Javascript
使用GruntJS构建Web程序之合并压缩篇
Jun 06 Javascript
ext前台接收action传过来的json数据示例
Jun 17 Javascript
jQuery.prop() 使用详解
Jul 19 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
Aug 27 Javascript
JavaScript注入漏洞的原理及防范(详解)
Dec 04 Javascript
基于iScroll实现内容滚动效果
Mar 21 Javascript
node中的cookie的具体使用
Sep 13 Javascript
vue头部导航动态点击处理方法
Nov 02 Javascript
基于ant design日期控件使用_仅月份的操作
Oct 27 Javascript
JavaScript实现点击图片换背景
Nov 20 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带公钥加密类分享(每次加密结果都不一样哦)
2014/08/20 PHP
thinkphp中html:list标签传递多个参数实例
2014/10/30 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
2019/05/09 PHP
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
详解如何使用 vue-cli 开发多页应用
2017/12/16 Javascript
React Native自定义控件底部抽屉菜单的示例
2018/02/08 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
Vue 进阶之路(三)
2019/04/18 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
Django数据库连接丢失问题的解决方法
2018/12/29 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
Python threading的使用方法解析
2019/08/28 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
python实现在线翻译功能
2020/03/03 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
如何写出高质量、高性能的MySQL查询
2014/11/17 面试题
给酒店员工的表扬信
2014/01/11 职场文书
公司门卫管理制度
2014/02/01 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
2014法院四风问题对照检查材料思想汇报
2014/10/04 职场文书
初中生毕业评语
2014/12/29 职场文书
旷工检讨书1000字
2015/01/01 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
纪录片信仰观后感
2015/06/08 职场文书
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python