Cesium最靠普解决禁止相机进入地下

cesium 专栏收录该内容
3 篇文章 0 订阅

使用Cesium快一年了,就开源的三维地图引擎而言,个人认为是最方便的了。

 

在使用过程中遇到了很多的问题,如cgc2000,地图出现暗灰,加载互联网地图显示出现模糊等现像。在网上有很多资料,但是我发现大部分人是说不到重点,或乱写一通,总之最可怕的是知其然而不知其所以然的人,当然最近发现我也是

 

1、地图暗灰可以参照

      https://www.jianshu.com/p/4c4a6d769dc5该作者个人认为,是个实在人

      至于网上其它说的调灰度等均不可信,个人认为可以学习,但实际上没有任何用处,浪费时间

2、加载互联网地图显示出现模糊

      https://blog.csdn.net/weixin_46592036/article/details/106206502该作者个人认为,是个写程序的人,见不得一点瑕疵

      至于网上说的调整maximumScreenSpaceError等,可以试试也有效果,但是个人认为解决得不是很彻底

 

3、让我最头痛的问题是进地问题

     我在网上查找了很多资料,均能解决一部分问题,总会有很大的可能性进地。

     算了编不了,直接说思路:

      进地主要是通过鼠标抬高地图时,直接翻到地下面了,考虑的方向是实时检测是否与地面接触,但是因为是三维的是一个地球,所以只能考虑设定一个相机仰角,提前保存好坐标,超过仰角则重置相机。

      网上有很多直接通过鼠标事件进行监测,经过测试完全达不到效果,要不是没解决到,要不就是进地后又回弹,使用感觉不好因此我直接修改了Cesium.js的update3D方法代码如下:

function update3D(controller) {

        //开始

        var scene = controller._scene;

        var camera = scene.camera;

        var cameraPosition = Cartesian3.clone(camera.position);

        var cameraRight = Cartesian3.clone(camera.right);

        var cameraDirection = Cartesian3.clone(camera.direction);

        var cameraUp = Cartesian3.clone(camera.up);

        reactToInput(controller, controller.enableRotate, controller.rotateEventTypes, spin3D, controller.inertiaSpin, '_lastInertiaSpinMovement');

        reactToInput(controller, controller.enableZoom, controller.zoomEventTypes, zoom3D, controller.inertiaZoom, '_lastInertiaZoomMovement');

        reactToInput(controller, controller.enableTilt, controller.tiltEventTypes, tilt3D, controller.inertiaSpin, '_lastInertiaTiltMovement');

        reactToInput(controller, controller.enableLook, controller.lookEventTypes, look3D);

        if (scene.mode == SceneMode.MORPHING) {

            return;

        }

 

        if (scene.mode == SceneMode.SCENE2D) {

            return;

        }

        if(camera.pitch>CesiumMath.toRadians(-20))

        {

            camera.position = cameraPosition;

            camera.right = cameraRight;

            camera.direction = cameraDirection;

            camera.up = cameraUp;

        }

        //结束

    }

  • 0
    点赞
  • 1
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值