Cesium的pickEllipsoid和pickPositio

2019-10-10  本文已影响0人  芒果香蕉_

最近实现Cesium手动绘制图形的功能,需要鼠标点击及移动时获取当前的空间坐标。实现的过程中发现了下面两种获取空间坐标的方式:

在Cesium Sandcastle给出的绘制示例中,采用了pickPosition的方式获取空间坐标,并给出如下注释:

Csium Sandcastle绘制示例
大致可理解为viewer.camera.pickEllipsoid 在加载地形的场景上获取的坐标有误差,用viewer.camera.pickPosition来解决这一问题。于是我用viewer.camera.pickEllipsoid 做了下测试,发现确实有较大误差:
pickEllipsoid在地形起伏表面绘制.gif
于是采用了Cesium Sandcastle中推荐的viewer.scene.pickPosition进行位置获取,却发现误差更大了
pickPosition.gif
查阅资料后得知:viewer.scene.pickPosition需要开启“地形深度检测”来解决在没有3dTile模型下的笛卡尔座标不准问题:
//解决viewer.scene.pickPosition(e.position)在没有3dTile模型下的笛卡尔座标不准问题。
viewer.scene.globe.depthTestAgainstTerrain = true;

也就是说,viewer.scene.pickPosition 在未开启“地形深度检测”的情况下只能在3DTile上准确获取空间坐标(如下图)。

未开启地形深度检测,pickPosition在3DTile上绘制.gif
开启“地形深度检测”后,viewer.scene.pickPosition 也能在非3DTile上准确获取坐标(如下图)。
开启地形深度检测的pickPosition.gif
总结如下

新发现问题

当开启了地形深度检测后,绘制点时会被遮挡。

上一篇 下一篇

猜你喜欢

热点阅读