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 相关文章推荐
javascript qq右下角滑出窗口 sheyMsg
Mar 21 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
Sep 01 Javascript
Javascript常用小技巧汇总
Jun 24 Javascript
jQuery插件简单实现方法
Jul 18 Javascript
Position属性之relative用法
Dec 14 Javascript
bootstrapValidator自定验证方法写法
Dec 01 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
May 18 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
Sep 12 Javascript
JS监听滚动和id自动定位滚动
Dec 18 Javascript
node app 打包工具pkg的具体使用
Jan 17 Javascript
三步实现ionic3点击退出app程序
Sep 17 Javascript
js实现简单贪吃蛇游戏
May 15 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 文件上传功能实现代码
2009/06/24 PHP
php 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
php中rename函数用法分析
2014/11/15 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
基于javascript实现放大镜特效
2020/12/03 Javascript
python简单实现操作Mysql数据库
2018/01/29 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
Joe Fresh官网:加拿大时尚品牌和零售连锁店
2016/11/30 全球购物
"序列点" 是什么
2016/07/29 面试题
报关简历自我评价怎么写
2013/09/19 职场文书
企业管理部经理岗位职责
2013/12/24 职场文书
2014年计生标语
2014/06/23 职场文书
民政局个人整改措施
2014/09/24 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
团代会邀请函
2015/02/02 职场文书
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python
Python安装使用Scrapy框架
2022/04/12 Python