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

boyanx2个月前技术教程13

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)。

 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);

标签: js全屏

相关文章

LightGallery - 轻量的、响应式jQuery相册

jQuery LightGallery是一个轻量级的,可定制的,模块化的,响应式的 jQuery 相册插件。它采用 CSS 来实现图像和视频的大小调整。因此,这将是非常灵活的,并且比使用 JavaSc...

web前端:使用nw.js 做桌面程序_web桌面程序开发

1. 同类型产品 electronnw.js 原名为node-webkit, 后更名为nw.js, 基于node.js & Chromium, 以浏览器为核心,入口为一个index.htm;...

耗电量减少28%,Chrome浏览器更省电了

Chrome浏览器更省电了Chrome凭借着快速的网页加载速度和丰富的扩展插件,一直是网上冲浪选手的首选浏览器之一。除了好用之外,Chrome也是知名的内存吞噬者和耗电大户,之前就有过网友抱怨使用Ch...

分享 7 个你可能还不知道 JavaScript Web API

转载说明:原创不易,未经授权,谢绝任何形式的转载当构建网站和Web应用程序时,JavaScript是拯救全局的超级编程语言。它拥有许多令人惊叹且实用的功能,我们可以利用这些功能使Web变得更加互动。在...

从「能用」到「好用」:SMART LINE V5都做了哪些改变(上)

SMART LINE Panel 自2010年首代问世后,一直在不断进阶,从 V1 基础功能起步,历经 V2 增加以太网接口、V3 又增加 USB 接口、V4 实现色彩与功能跃升。如今,全新 V5 震...

被遗忘的墓地3分30秒成就达成 附通关攻略

本期给大家带来的是玩家被遗忘的墓地3分30秒成就达成,附遗忘墓地通关的文字攻略哦,下面就让我们一起来看看本期的精彩内容吧!今天和各位好友还有亲爱的老公一起打了墓地的3.30成就。整体来说,队伍输出还是...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。