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 将disabled的元素置为enabled的三种方法
Jul 25 Javascript
javascript题目,重写函数让其无限相加
Feb 15 Javascript
JQuery 常用方法和事件详细介绍
Apr 18 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
Nov 23 Javascript
javascript中获取元素标签中间的内容的实现方法
Oct 08 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
May 04 Javascript
微信小程序点击控件修改样式实例详解
Jul 07 Javascript
微信小程序 获取session_key和openid的实例
Aug 17 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
Mar 22 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
Mar 28 jQuery
Vue项目中如何引入icon图标
Mar 28 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
Nov 05 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 include加载文件两种方式效率比较
2010/08/08 PHP
PHP实现上传多图即时显示与即时删除的方法
2017/05/09 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
List Installed Hot Fixes
2007/06/12 Javascript
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
在Google 地图上实现做的标记相连接
2015/01/05 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
json的使用小结
2016/06/08 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
Python中请使用isinstance()判断变量类型
2014/08/25 Python
Python三元运算实现方法
2015/01/12 Python
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
python实现日志按天分割
2019/07/22 Python
python检测服务器端口代码实例
2019/08/31 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
Python实现数字的格式化输出
2020/08/01 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
详解python polyscope库的安装和例程
2020/11/13 Python
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
小人国观后感
2015/06/11 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫
Redis keys命令的具体使用
2022/06/05 Redis