在地球的开发中经常使用LOD技术,将地球按照经纬度分成若干块,然后根据摄像机的位置来细化地形。当地形块距离摄像机较近时细化程度高,当地形块距离摄像机较远时细化程度低。假如我们用一个球体去包围摄像机,我们就可以检测如果一个地形块在球体范围内就将地形块进行细化,反之则不对地形块进行细化。这样我们就需要检测球体和地形块是否相交。地形块是一个球面扇形或者叫球心扇形,我们需要检测球面扇形是否和摄像机的包围球相交。直接求解比较麻烦,这里我使用了一种比较简单的求解方式。
如果扇形面到球心的的最近距离能够求出来的话,那么我们立刻就能判断扇形面是否和球相交,所以问题进一步简化为求扇形面到球心的最近距离的求解,求解过程如下:
1、求出摄像机和地球中心的连线在地球表面的交点的经纬度和xyz坐标。
2、判断交点的经纬度知否在扇形面的经纬度范围内,如果在范围内,那么这一点就是扇形面到摄像机的最近距离点。
3、如果不在范围内则分为几种情况:
(1)交点的经度在范围内,那么从交点沿着经线行进,知道和扇形面纬度线的相交,那么这一交点就是最近点。
(2)交点的维度在范围内,那么情况略复杂,交点沿着纬度线前进知道和扇形面的经度线相交得到交点1,把交点1到摄像机的距离和扇形面相交一侧的两个顶点到摄像机的距离进行比较,最小的那个就是最近点,之所以这样判断是因为越靠近南北极时,最近点越是会偏向相交点所在边界的一端。
(3)交点不在经纬度范围内,那么扇形面的4个顶点中的某一个顶点就是最近点。
求出最近点后就能根据摄像机的距离判断当前块是否做细分,以及细分到何种程度。