屏幕坐标转three.js坐标

将屏幕坐标转变成threejs空间坐标:

function transToThreeCoord(x,y){let mouse = new THREE.Vector3();mouse.x = (x/window.innerWidth)*2 -1;mouse.y = -(y/window.innerHeight)*2 + 1;return mouse;
}

注意:在实际使用中,画布的宽高度并不一定是window.innerWidth或window.innerHeight,要根据画布实际的宽高度进行替换

推导过程如下:

上图中的式子化简一下就能得到transToThreeCoord中的公式

three.js坐标转屏幕坐标

将three.js三维坐标转换成屏幕上的二维坐标

/**
* 将three.js三维坐标转换成屏幕上的二维坐标
* @param THREE.Vector3 vector three.js三维坐标
* @return {x:int,y:int} 屏幕坐标
*/
function transToScreenCoord(vector) {var screenCoord = {};vector.project(camera);screenCoord.x = (0.5 + vector.x / 2) * window.innerWidth; screenCoord.y = (0.5 - vector.y / 2) * window.innerHeight;return screenCoord;
}

注意:在实际使用中,画布的宽高度并不一定是window.innerWidth或window.innerHeight,要根据画布实际的宽高度进行替换

接下来解释一下这个转换的过程:

vector.project(camera) 这句的意思是,将一个三维坐标,投影到相机平面上,使之变成一个二维坐标。需要注意的是,投影得到的结果是一个标准向量(或者叫单位向量),其值是限定在[-1,1]范围内的。并且,这个向量是定义在以屏幕中心为原点的坐标系里的,这个坐标系和屏幕坐标系的关系,就像下图一样:

假如经过投影之后的点就是上图中的点A(0.3,0.5),屏幕坐标系是sx-s0-sy,相机平面坐标系是tx-t0-ty,坐标系的各项参数已经标在图上,试着求A点在屏幕坐标系中的坐标。你求一遍的话,就会理解

screenCoord.x = (0.5 + vector.x / 2) * window.innerWidth;
screenCoord.y = (0.5 - vector.y / 2) * window.innerHeight;

的意思。

threejs坐标转换相关推荐

  1. threejs 将屏幕坐标转换成3d中的坐标。

    将当前屏幕上的坐标转换成3d中的坐标pos 是当前canvas屏幕上的坐标,targetZ 是物体距离原点的距离 private get3DPosByCanvasPos (pos: THREE.Vec ...

  2. ThreeJS 屏幕坐标与世界坐标互转

    文章目录 屏幕坐标系和标准设备坐标 屏幕坐标转世界坐标 世界坐标转屏幕坐标   要理解坐标系间的转换过程,需要提前了解: ThreeJS 中的几种坐标系 屏幕坐标系和标准设备坐标系   不想看链接中的 ...

  3. threejs对象拾取

    对象拾取 对象拾取也就是要获得鼠标事件发生位置的图形对象.在threejs中,是通过Raycaster 对象来拾取对象的,ray是射线,caster是投射器,从字面上即可理解其工作原理是:从某个方向发 ...

  4. mapbox-gl添加threejs飞线

    文章目录 前言 飞线实现 1 初始化地图并加载three图层 2 绘制飞线几何体 将几何体正确定位在mapbox上 正确操作BufferGeometry几何体 3 tween实现动画 全部代码 总结 ...

  5. THREEJS在场景图上动态标识一些文字方法二(文字精灵sprite)

    threejs文字精灵sprite的实现 1.手动添加文字精灵 2.通过json动态获取文字精灵,并进行交互 3.point模型只表示位置 4.CircleGeometry实现 5.3.PlaneGe ...

  6. ThreeJs做智慧城市项目后记

    随着时间的推移技术的进步,前端越来越杂了,但是也越来越精彩了.只是会用一点ThreeJs,对于WebGl的原理并没了解过,这并不影响我们利用ThreeJs去做出一个非常炫酷的项目. 开始 新世界的大门 ...

  7. threejs 物体根据相机位置显示_threejs

    threejs 点击数: 10347 简介既然我们可以使用canvas元素创建纹理,Three.js也给我们提供了可以实现video创建纹理的方法.我们通过Three.js提供的VideoTextur ...

  8. Threejs实现绘制地球,地理位置标注、经纬度转换世界坐标threejs坐标

    1,介绍 该示例使用的是 r95版本Three.js库. 主要实现功能:绘制地球和地理位置进行标注 效果图如下: 2,主要说明 准备一张地图,创建一个球体并进行贴图,把地理位置经纬度转换成threej ...

  9. threejs(一):初步认识与使用

    应项目需求,学习threejs将近半个月,现在总结一下我从网上搜集的比较有份量的资料和在项目中踩到的大小坑,以下内容如果有误,感谢各位大神不吝赐教. 一.threejs学习的资料 Threejs入门指 ...

最新文章

  1. restful可以转发么_DRF使用超链接API实现真正RESTful
  2. Android启动画面实现
  3. php获取域名方法,PHP实现获取域名的方法小结
  4. 云服务器开启TCP Server 客户端无法连接的解决方法
  5. g开头的C语言编程软件,C语言函数大全(g开头)
  6. LeetCode 1473. 给房子涂色 III(DP)
  7. 密码学电子书_密码学中的电子密码书(ECB)
  8. 【CODEVS2577】医院设置
  9. leetcode876. 链表的中间结点
  10. linux时间树,linux小知识之查看系统时间
  11. Open3d之坐标变换
  12. TCP/IP协议简单介绍
  13. 外网接口(浏览器接口)调取设备数据,放到数据库里
  14. DataDictionaryTool 一款生成数据库字典工具支持mysql和oracle
  15. 玩机搞机---全网最详细的手机全机型 刷机教程一
  16. linux 升级php 5.3,Linux PHP5.3升级PHP5.5.33 (CentOS)
  17. 线性方程组——Jacobi迭代和G_S迭代
  18. 投标书如何写?(转)
  19. 计算机网络 通信网络笔记(自顶向下的方法)from top to the botton of MIT
  20. SpringBoot(3) 获取后台返回字符串对象及json数据

热门文章

  1. 【Shiro】Unsatisfied dependency expressed through method 'securityManager' parameter 3
  2. Vue中import引入模块路径时的@符号
  3. JacksonUtils Jackson的JSON序列化反序列化
  4. oracle工作流错误,工作流错误处理 - Oracle® ZFS Storage Appliance 客户服务手册
  5. classpass 配置mysql_jmeter压测学习18-JDBC配置连接mysql数据库
  6. unity2018关联不到vs_现实VS真爱:远嫁的幸福和悲哀
  7. php的ddd,在MVC框架中实现DDD – PHP
  8. 带电插拔损坏设备原理_Win10拔U盘不用再点“安全弹出”了,XP和Win7老用户都眼馋了...
  9. 【OS学习笔记】三 计算机的启动过程
  10. python二进制、字符编码及文件操作