前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ThreeJS中三维世界坐标转换成二维屏幕坐标

ThreeJS中三维世界坐标转换成二维屏幕坐标

作者头像
程序你好
发布2021-07-23 14:37:40
4.3K0
发布2021-07-23 14:37:40
举报
文章被收录于专栏:程序你好程序你好

Threejs全称是“Javascript 3D library”。WebGL是openGL在浏览器上的一个实现。Threejs对WebGL进行了封装,让前端开发人员在不需要掌握很多数学知识和绘图知识的情况下轻松进行web 3D开发,简单易用。

三维开发中最常用的是三维坐标和二维坐标的转换,比如说:给一个三维模型中动态赋予一个文字标签进行展示,以前使用OpenGL处理起来比较麻烦,使用Threejs就简单了很多。

关键一步:vector.project(camera) ,表示将该三维坐标投影到视角相机平面上,变成一个二维坐标,结果为一个单位向量(标准向量),返回的结果是世界坐标worldVector在camera相机对象矩阵变化下对应的标准设备坐标, 标准设备坐标xyz的范围是[-1,1]。

因为canvas画布是全屏状态,完全填充浏览器窗口的客户区,canvas画布的宽高尺寸就是window.innerWidth、window.innerHeight。画布的中心从屏幕坐标系的角度看是坐标是(window.innerWidth/2,window.innerHeight/2),从WebGL标准设备坐标系的角度看是坐标原点(0,0)。

代码语言:javascript
复制
 var vector = worldVector.project(camera);//通过世界坐标获取转标准设备坐标
        var w = window.innerWidth / 2;
        var h = window.innerHeight / 2;
        var x = Math.round(vector.x *w + w);//标准设备坐标转屏幕坐标
        var y = Math.round(-vector.y * h + h);

3D坐标转换成2D坐标,是一种降维度操作,统称为投影。

同理使用函数vector.unproject(camera)则可以从屏幕2d坐标转换为3d空间坐标,

var vector = new THREE.Vector3(mX, mY, 0.5 );//这里定义深度值为0.5

//将鼠标坐标转换为3D空间坐标

vector.unproject(camera);

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档