Three.js 地理坐标和三维空间坐标的转换

本文介绍了如何在Three.js中进行地理坐标(经纬度)与三维空间坐标之间的转换。通过三角函数计算法和使用THREE.Spherical及THREE.Vector3的方法详细阐述了转换过程。
摘要由CSDN通过智能技术生成

编者按:本文作者高峰,360奇舞团前端工程师,W3C性能工作组/WOT工作组成员。

一、引言

在实现3D地球时,球面是通过地理贴图渲染的。所以我们所说的地理坐标和三维空间坐标的转换,是指将地理贴图上的坐标,转换为球面坐标(https://en.wikipedia.org/wiki/Spherical_coordinate_system),即three.js中的三维坐标。

在介绍他们之间如何转换之前,我们先来了解下这两种坐标。

二、地理坐标(贴图坐标)

一个完整的地理贴图坐标(https://zh.wikipedia.org/wiki/%E5%9C%B0%E7%90%86%E5%9D%90%E6%A0%87%E7%B3%BB)如下,其中第一张为简图,能够帮我们快速理解经纬度与地理坐标,第二张为详细经纬度分布图。

640?wx_fmt=jpeg

640?wx_fmt=png

可以看出贴图横向表示经度,范围[-180(西经),180(东经)],竖向表示纬度[-90(南纬), 90(北纬)],因此坐标转化就成了经纬度到球面坐标的转化。

三、球面坐标

在three.js中,创建球体时有以下几个重要参数:

  • 半径(radius)以及分段数

  • 水平方向起始角度(phiStart)

  • 水平方向角度大小(phiLength)

  • 垂直方向起始角(thetaStart)

  • 垂直方向角度大小(thetaLength)

其中phiStart的默认值0,起始点为x轴负方向。thetaStart的默认值也为0,起始点为z轴正方向。如下图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值