编者按:本文作者高峰,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)如下,其中第一张为简图,能够帮我们快速理解经纬度与地理坐标,第二张为详细经纬度分布图。
可以看出贴图横向表示经度,范围[-180(西经),180(东经)],竖向表示纬度[-90(南纬), 90(北纬)],因此坐标转化就成了经纬度到球面坐标的转化。
三、球面坐标
在three.js中,创建球体时有以下几个重要参数:
半径(radius)以及分段数
水平方向起始角度(phiStart)
水平方向角度大小(phiLength)
垂直方向起始角(thetaStart)
垂直方向角度大小(thetaLength)
其中phiStart的默认值0,起始点为x轴负方向。thetaStart的默认值也为0,起始点为z轴正方向。如下图所示: