Three.js地球开发—6.三维球面上某点进行贴图标注

**需求:**在三维地球上某点进行贴图,并且任意角度都可以观察到。
发生场景:设想的是直接用贴图在某点贴上去,可发现旋转视角并不能任意方向都观察到,查了下资料才想起来three.js的贴图默认贴在xoy平面,即使开了双面可见,视线总有看不见的(贴图是二维平面,而不是三维的)。
在这里插入图片描述

解决办法:保证贴图与球面要进行贴图的某点相切,这样各个视角就看得见了。
首先要知道相切的概念:一看图就懂,不解释了。
在这里插入图片描述
然而通常我们都是在二维平面中去了解他们,当涉及到三维开发的时候,通常的思路是:计算两个面的法向量,若两个法向量平行并重叠,则两个平面两两垂直。
1.计算该点与球心构成法向量,并进行归一化;

var coordVec3 = new THREE.Vector3(coord.x, coord.y, coord.z).normalize();

2.因为three.js的贴图默认贴在xoy平面,所以要贴的图法向量取(0, 0, 1)

var meshNormal = new THREE.Vector3(0, 0, 1);

3.利用three封装好的四元数库,计算从向量vFrom到vTo所需的四元数,然后改变贴图的状态。
.setFromUnitVectors ( vFrom : Vector3, vTo : Vector3 ) : Quaternion
Sets this quaternion to the rotation required to rotate direction vector vFrom to direction vector.

mesh.quaternion.setFromUnitVectors(meshNormal, coordVec3);

最终效果图:在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值