学习【Cesium】第五篇,Cesium相机系统(学不会揍我)

本文详细介绍了Cesium相机系统的五种方法:setView用于设置视图位置;flyHome用于将相机飞回主视图;flyTo实现空中飞行切换视域效果;lookAt锁定场景视角;viewBoundingSphere则使相机飞到包含边界球的位置。通过具体代码示例展示了各方法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1. Cesium 相机系统-setView方法:  设置视图位置

 // Cesium 相机系统 --setView
const position = Cesium.Cartesian3.fromDegrees(114.21, 30.55, 600)
this.viewer.camera.setView({
    destination: position, // 相机位置
    orientation: {
        heading: Cesium.Math.toRadians(0), // 水平旋转  -正北方向
        pitch: Cesium.Math.toRadians(-90), // 上下旋转  --俯视朝向
        roll: 0 // 视口翻滚角度
    }
})

以上代码执行后,相机视角定位在绿色的小球这里,如图:

2. Cesium 相机系统-flyHome方法: 将相机飞到主视图

 // Cesium 相机系统 --flyHome   将相机飞到主视图
loadFlyHome() {
    this.loadView()
    // 三秒后飞回主视图
    setInterval(() => {
        this.viewer.camera.flyHome(1)
    }, 3000)
}

以上代码需要结合相机系统其他方法进行联合操作,方能体现其作用,我这边以flyHome和setView联合使用,效果即将相机还原为主视图:

   

3.  Cesium 相机系统-flyTo方法:空中飞行逐步切换视域效果
 // Cesium 相机系统 --flyTo   空中飞行逐步切换视域效果  相对setView视觉效果更出彩
loadFlyTo() {
    const position = Cesium.Cartesian3.fromDegrees(114.21, 30.55, 600)
    this.viewer.camera.flyTo({
        destination: position, // 相机位置
        orientation: {
            heading: Cesium.Math.toRadians(0), // 水平旋转  -正北方向
            pitch: Cesium.Math.toRadians(-90), // 上下旋转  --俯视朝向
            roll: 0 // 视口翻滚角度
        },
    duration: 5   // 动画持续时间
    })
}

以上代码执行后,相机视角定位过程中会有动画效果,如图(地球没加载出来,不过不重要,主要看效果):

4.  Cesium 相机系统-lookAt方法:场景视角锁定

// Cesium 相机系统 --lookAt   场景视角锁定
loadLookAt() {
    const center =  Cesium.Cartesian3.fromDegrees(114.21, 30.55)  // 目标位置
    const heading =   Cesium.Math.toRadians(50)// 水平旋转  -正北方向
    const pitch =  Cesium.Math.toRadians(-90) // 上下旋转  --俯视朝向
    const range = 2500 // 目标点高度
    this.viewer.camera.lookAt(center, new Cesium.HeadingPitchRange(heading, pitch, range))
}

以上代码执行后,场景视角锁定,拖动视图主要以小球视角进行环绕查看,如图:

 5. Cesium 相机系统-viewBoundingSphere方法:飞到视图包含提供的边界球的位置

// Cesium 相机系统 --viewBoundingSphere  将相机飞到当前视图包含提供的边界球的位置。
// 设置相机,以便当前视图包含提供的边界球。
// 偏移量是在以边界球体中心为中心的局部东西向上参考系中的航向/俯仰/范围。航向角和俯仰角在当地东西北上参考系中定义。航向是从 y 轴到 x 轴增加的角度。俯仰是从 xy 平面的旋转。正俯仰角在平面下方。负俯仰角在平面上方。范围是到中心的距离。如果范围为零,则将计算范围以使整个边界球体可见。
// 在 2D 中,必须有自上而下的视图。摄像机将放置在目标上方向下看。目标上方的高度将是范围。航向将根据偏移量确定。如果无法根据偏移量确定航向,则航向将为北。
loadViewBoundingSphere() {
    const position =  Cesium.Cartesian3.fromDegrees(114.21, 30.55, 1500)  // 目标位置
    const orientation = Cesium.Transforms.headingPitchRollQuaternion(position, new             Cesium.HeadingPitchRoll(-90, 0, 0)) // 方向
    this.viewer.entities.add({
        position,
        orientation,
        model: {
            uri: window.CESIUM_BASE_URL + '/SampleData/models/CesiumAir/Cesium_Air.glb', // 模型路径
            minimumPixelSize: 100, // 最小缩放大小
            maximumScale: 10000, // 缩放最大比例
            show: true
        }
    })
this.viewer.camera.viewBoundingSphere(new Cesium.BoundingSphere(position, 20), new Cesium.HeadingPitchRange(0, 0, 0))
}

以上代码主要以飞机作为实体,将摄像机放置在实体飞机为中心进行局部视角环绕,如下图:

 当然,想要知道其他的方法,在官方文档、实例中也有介绍,我这边也是跟着大神的思路去逐步学习,目前关于相机的方法就举例到此了。下一章,学习地图、地形加载,go go

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

New_Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值