Cesium创建无人机视锥,同步视锥与鹰眼地图视角,实现视锥键盘控制。解决视锥初始化位置不准确问题等

一、整体效果图如下

二、功能简介

1、暂未实现视锥的far和near视角框在鹰眼视图中的绘制,待开发……

2、已经实现基于地理位置创建视锥,并实现视锥的上下左右移动,视锥的heading、pitch的移动,同时包括无人机偏移角度的动态监测。鹰眼地图基于视锥属性创建Camera,实现鹰眼视角与视锥视角的同步关联变化效果。


三、实现思路及关键代码

        1、思路

        (1)创建主视图和鹰眼视图,并设定初始相机位置
        (2)创建视锥体。避免踩坑
        (3)视锥体的视角与鹰眼视图同步
        (4)键盘控制事件的监听与视锥位置更新,同时同步鹰眼视图
        2、主要代码

  1) 创建主视图和鹰眼视图,并设定初始相机位置

      // 主视图初始化
      mainViewerInstance = new Cesium.Viewer(mainViewer.value, {
        sceneMode: Cesium.SceneMode.SCENE3D,
        baseLayerPicker: false,
        shouldAnimate: true,
        terrainProvider: Cesium.createWorldTerrain(),
        geocoder: false, //右上角 搜索
        homeButton: false, //右上角 Home
        sceneModePicker: false, //右上角 2D/3D 切换
        navigationHelpButton: false, //右上角 Help
        animation: false, // 左下角 圆盘动画控件
        timeline: false, //时间轴
        fullscreenButton: false, //右下角 全屏控件
        vrButton: false, // 如果设置为 true,将创建 VRButton 小部件。
        scene3DOnly: true, // 每个几何实例仅以 3D 渲染以节省 GPU 内存
        infoBox: false, //隐藏点击要素后的提示信息
      });
      mainViewerInstance._cesiumWidget._creditContainer.style.display = "none"; //隐藏版本信息
      mainViewerInstance.camera.setView({
          destination: Cesium.Cartesian3.fromDegrees(
            position.value.longitude,
            position.value.latitude,
            position.value.height
          ),
          orientation: {
            heading: Cesium.Math.toRadians(orientation.value.heading),
            pitch: C
Cesium中,视锥颜色渐变通常用于可化相机的视锥范围,通过颜色渐变可以更直观地展示视锥的远近变化。具体实现方法如下: 1. **创建视锥实体**:首先,需要创建一个视锥实体来代表相机的视锥范围。 2. **定义颜色渐变**:通过定义颜色数组和位置数组来指定颜色渐变的起始和结束颜色。 3. **应用材质**:将定义好的颜色渐变应用到视锥实体的材质上。 以下是一个示例代码,展示了如何在Cesium实现视锥颜色渐变: ```javascript // 初始化Cesium图 var viewer = new Cesium.Viewer('cesiumContainer'); // 创建相机视锥实体 var cameraFrustum = viewer.scene.camera.frustum; var frustumEntity = viewer.entities.add({ name: 'Camera Frustum', polygon: { hierarchy: new Cesium.CallbackProperty(function() { return Cesium.Cartesian3.fromRadiansArrayHeights([ Cesium.Math.toRadians(cameraFrustum.near.x), cameraFrustum.near.y, cameraFrustum.near.z, Cesium.Math.toRadians(cameraFrustum.far.x), cameraFrustum.far.y, cameraFrustum.far.z, Cesium.Math.toRadians(cameraFrustum.far.x), cameraFrustum.far.y, cameraFrustum.far.z, Cesium.Math.toRadians(cameraFrustum.near.x), cameraFrustum.near.y, cameraFrustum.near.z ]); }, false), material: new Cesium.ColorMaterialProperty(new Cesium.CallbackProperty(function() { return Cesium.Color.fromGradient({ colors: [Cesium.Color.RED, Cesium.Color.YELLOW, Cesium.Color.GREEN], positions: [0.0, 0.5, 1.0] }); }, false)) } }); // 添加实体到场景中 viewer.entities.add(frustumEntity); // 更新视锥实体 viewer.scene.preRender.addEventListener(function() { frustumEntity.polygon.hierarchy = new Cesium.CallbackProperty(function() { return Cesium.Cartesian3.fromRadiansArrayHeights([ Cesium.Math.toRadians(cameraFrustum.near.x), cameraFrustum.near.y, cameraFrustum.near.z, Cesium.Math.toRadians(cameraFrustum.far.x), cameraFrustum.far.y, cameraFrustum.far.z, Cesium.Math.toRadians(cameraFrustum.far.x), cameraFrustum.far.y, cameraFrustum.far.z, Cesium.Math.toRadians(cameraFrustum.near.x), cameraFrustum.near.y, cameraFrustum.near.z ]); }, false); }); ``` 在这个示例中,我们创建了一个视锥实体,并通过颜色渐变来展示视锥的远近变化。颜色渐变从红色(近处)渐变到绿色(远处),中间过渡为黄色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值