Skip to content

Coordinate System

huangkui edited this page Jul 13, 2020 · 1 revision

坐标系统解释: 地理空间中的三维表达是基于笛卡尔坐标系(算法默认也使用笛卡尔坐标系) earth.gl的三维空间坐标构建在笛卡尔坐标系之下(与cesium一致) 与WebGL坐标系不同之处如下图所示(注意xoy平面,基于右手法则,ox垂直于屏幕)

           y                                         z
           |                                         |
           |                                         |
           |                                         |
           |__ __ __ __ __x       =>                 |__ __ __ __ __ y 
          / o                                       / o
         /                                         /
        /                                         /
       /                                         /
       Z                                        x
            WebGL                                         笛卡尔

首先构建笛卡尔坐标系,用于表达空间位置, 原点(0,0,0)为地球的中心。 使用最长的半轴作为半径构建椭球体(实际上是正圆),代码参考 Ellipsoid.js 输入相机的初始位置坐标,形式为(经度,纬度,离里面高度(米)) 对经纬度转换,假设在单位圆内,根据经纬度可以得到空间坐标x,y,z

//笛卡尔坐标系下的x, y, z
const x = cos(latitude) * cos(longitude);
const y = cos(latitude) * sin(longitude);
const z = sin(latitude);

单位圆上的x,y,z换算成以真实的米, (x,y,z)是垂直于球的向量,离地高度就是

//earth.gl构造的是正圆,所以不用如此复杂的计算
//此计算过程适合椭球体的(当然也适用于正圆)
const radiiSquared = (radii*radii, radii*radii, radii*radii);
let k = radiiSquared.multiply(x,y,z);
const gamma = sqrt(n.clone().dot(k));
k = k.scale(1/gamma);
//计算离地高度后,矢量相加(k+h)即摄像机在笛卡尔空间的坐标
//h = 离地高度 dot (x,y,z)
camera.position = k.add(h);

摄像机的用途是将笛卡尔构建的三维坐标换算成屏幕坐标NDC,

           y                                                1.0f
           |                                                 |
           |                                                 |
           |                                                 |
           |__ __ __ __ __x       =>        -1.0f __ __ __ __|__ __ __ __ __  1.0f
          / o                                                |                x
         /                                                   |
        /                                                    |
       /                                                   -1.0f
       Z                                                     y
            WebGL                                           NDC

earth.gl 目前仅构建了PerspectiveCamera 通过设置 up 方向为 Vec3(0,0,1) 表示笛卡尔坐标系 其他部分与webgl常规的投影算法一致

Clone this wiki locally