Cesium 相机系统

server/2024/11/19 12:54:06/

Cesium 的相机系统是其 3D 地球渲染引擎的重要组成部分,它控制用户在虚拟地球上的视图和交互体验。Cesium 的相机系统具备灵活性和强大的功能,允许开发者自定义视图、导航和交互方式。以下是 Cesium 相机系统的主要特点和功能:


1. 相机的基本概念

在 Cesium 中,相机表示为一个对象,包含位置、方向和视野范围等属性。相机的核心属性包括:

  • 位置(position):相机在世界坐标系中的位置,通常以 Cartesian3 表示。
  • 方向(direction):相机的朝向,即相机镜头的指向。
  • 上方向(up):定义相机的“上”方向。
  • 右方向(right):定义相机的“右”方向,通常与方向和上方向正交。

相机的这些方向属性决定了相机的视角和观察范围。


2. 视图控制功能

Cesium 提供了一组函数,用于控制相机视图的切换和动画:

  • 设置视图(setView)

    javascript">viewer.camera.setView({destination: Cesium.Cartesian3.fromDegrees(longitude, latitude, height),orientation: {heading: Cesium.Math.toRadians(heading),  // 朝向(方位角)pitch: Cesium.Math.toRadians(pitch),      // 倾斜角roll: Cesium.Math.toRadians(roll)         // 旋转角}
    });
    

    用于直接跳转到指定视图。

  • 飞行到视图(flyTo)

    javascript">viewer.camera.flyTo({destination: Cesium.Cartesian3.fromDegrees(longitude, latitude, height),duration: 5, // 飞行时间orientation: {heading: Cesium.Math.toRadians(heading),pitch: Cesium.Math.toRadians(pitch),roll: Cesium.Math.toRadians(roll)}
    });
    

    为用户提供平滑的动画过渡效果。

  • 缩放和倾斜

    • camera.zoomIn(amount):放大视图。
    • camera.zoomOut(amount):缩小视图。
    • 通过调整 pitch 实现视角倾斜。

3. 相机限制

Cesium 支持为相机视图添加限制,以防止用户查看超出指定范围的区域:

  • 范围限制
    javascript">camera.constrainedAxis = Cesium.Cartesian3.UNIT_Z; // 限制相机只能绕 Z 轴旋转
    
  • 矩形范围约束
    javascript">camera.lookAtRectangle(Cesium.Rectangle.fromDegrees(west, south, east, north));
    

4. 事件监听

Cesium 支持监听用户与相机交互的事件,例如鼠标滚轮缩放、拖动地图等。主要的事件有:

  • 鼠标操作事件:通过 ScreenSpaceEventHandler 实现。
    javascript">var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
    handler.setInputAction(function (movement) {var cartesian = viewer.camera.pickEllipsoid(movement.endPosition);console.log(cartesian);
    }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
    

5. 相机视锥

相机的视锥决定了视图中显示的内容。主要参数包括:

  • 视锥角(Field of View, FOV)
    相机的视锥角可以通过 camera.frustum 属性设置:
    javascript">viewer.camera.frustum.fov = Cesium.Math.toRadians(60); // 设置为60度
    
  • 视距范围(Near/Far Clipping Planes)
    控制相机视锥的近剪裁面和远剪裁面:
    javascript">viewer.camera.frustum.near = 1.0; // 最小可见距离
    viewer.camera.frustum.far = 5000000.0; // 最大可见距离
    

6. 自由视角与锁定目标

  • 自由视角:用户可以通过鼠标或触摸手势自由调整相机。
  • 锁定目标:使用 lookAt 方法使相机聚焦在特定目标上:
    javascript">var target = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);
    viewer.camera.lookAt(target, new Cesium.Cartesian3(0, 0, 1000)); // 锁定目标,设置偏移量
    

7. 第三人称/第一人称视角

Cesium 支持模拟第三人称(鸟瞰)和第一人称(地面)视角切换:

  • 第三人称视角:通常使用较高的视距和倾斜角。
  • 第一人称视角:
    javascript">viewer.camera.setView({destination: Cesium.Cartesian3.fromDegrees(longitude, latitude, height),orientation: {heading: Cesium.Math.toRadians(0),pitch: Cesium.Math.toRadians(-90),roll: Cesium.Math.toRadians(0)}
    });
    

Cesium 的相机系统功能丰富,可满足从简单的视图控制到复杂的交互和动画效果等各种需求。


http://www.ppmy.cn/server/143191.html

相关文章

Spring Boot汽车资讯:科技与速度的新境界

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了汽车资讯网站的开发全过程。通过分析汽车资讯网站管理的不足,创建了一个计算机管理汽车资讯网站的方案。文章介绍了汽车资讯网站的系统分析部分&…

应用系统开发(12) Zync中实现数字相敏检波

在 Xilinx Zynq 系列(如 Zynq-7000 或 Zynq UltraScale+)中实现数字相敏检波(DSP,Digital Synchronous Detection)可以通过硬件(PL部分,FPGA逻辑)和软件(PS部分,ARM Cortex-A 处理器)的协同工作来实现。以下是一个详细的设计方法,包括基本原理和 Zynq 的实现步骤。…

Windows安装Elasticsearch及Spring Boot整合ES教程

目录 一、在Windows上安装Elasticsearch1. 下载Elasticsearch2. 配置Elasticsearch3. 启动Elasticsearch4. 安装Head插件(可选) 二、Spring Boot整合Elasticsearch1. 创建Spring Boot项目并添加依赖2. 配置Spring Boot连接Elasticsearch3. 创建实体类和R…

Jenkins + gitee 自动触发项目拉取部署(Webhook配置)

目录 前言 Generic Webhook Trigger 插件 下载插件 ​编辑 配置WebHook 生成tocken 总结 前言 前文简单介绍了Jenkins环境搭建,本文主要来介绍一下如何使用 WebHook 触发自动拉取构建项目; Generic Webhook Trigger 插件 实现代码推送后,触…

RK3568笔记七十:使用xml记录数据

若该文为原创文章,转载请注明原文出处。 一、前言 在开发项目过程中,有一些操作记录或事件数据需要记录在本地或服务器,记录在本地有很多方式,这里记录使用xml简单的方式处理数据。 示例: 这是我想要记录下来的格式,累计记录200条,其中,可以创建参数,修改参数,查询…

数据分析-49-时间序列信息编码之采用虚拟变量

文章目录 1 基本概念1.1 虚拟变量(one-hot)1.2 时间特征2 模拟数据2.1 日期序列2.2 目标序列3 编码虚拟变量(one-hot)3.1 年份编码3.2 月份编码3.3 星期几编码4 拟合模型4.1 构建数据集(每月编码)4.2 构建数据集(每日编码)5 参考附录1 基本概念 1.1 虚拟变量(one-hot) 虚拟变…

Java-03 深入浅出 MyBatis - 快速入门(无 Spring) 增删改查 核心配置讲解 XML 与 注解映射

点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatis&#xff…

kafka-clients之max.block.ms

max.block.ms 是 Kafka 客户端Producer配置中的一个参数,决定了客户端阻塞的最大时间。当生产者调用某些方法(如 send() )时,如果客户端在内部遇到某些资源(如元数据或可用的缓冲区空间)不可用,…