学习Cesium中-Cesium中使用CZML(Cesium Language)格式数据的介绍

        Cesium中加载实体的方法我经常用Cesium.Primitive和Cesium.Entity对象来添加,然后最近在找怎么使用cesium实现火箭部分节点脱落的动画,发现了CZML格式来加载实体:Cesium 支持使用 CZML(Cesium Language)格式加载实体。

        CZML 是一种更强大和灵活的数据格式,适用于复杂的场景和动画效果。而直接使用JavaScript 对象字面量形式来创建实体,则更简单直接,适用于简单的场景和静态的实体。

下边是我编写的一个demo对象

const czml = [
         {
            id: "document", //节点的唯一标识符。文档节点,用于描述整个 CZML 数据的元数据信息。
            name: "CZML Model",//文档的名称
            version: "1.0",//CZML 版本号
            clock: {//时钟设置,用于控制时间和动画
                interval: "2023-05-31T08:00:00Z/2023-05-31T08:01:40Z",//时间间隔,表示场景的时间范围。
                currentTime: "2023-05-31T08:00:00Z",//当前
                multiplier: 1,//时间倍数,控制时间流逝的速度。
                range: "LOOP_STOP",//时间范围循环方式,当到达时间范围的末尾时停止。
                step: "SYSTEM_CLOCK_MULTIPLIER"//时间步进方式,使用系统时钟倍数进行步进。
            }
        },
        {
            id: "entity1",//实体节点,表示一个具体的实体,实体的唯一标识符。
            availability: "2023-05-31T08:00:00Z/2023-05-31T08:01:40Z",//实体的可用时间范围。
            position: {//实体的位置属性
                epoch: "2023-05-31T08:00:00Z",//位置的参考时间。
                cartographicDegrees: [
                    0,
                    101.200403,
                    30.396231,
                    0,
                    100,
                    108.400403,
                    31.396231,
                    800000,
                ]
            },
            orientation: {
                velocityReference: "#position"//方向的参考属性,指向实体的位置属性。
            },
            model: {
                gltf: "launchvehicle.glb",
                minimumPixelSize: 128,
                maximumScale: 20000,
                articulations: {//模型的关节动画定义。
                    "Fairing Open": {
                        epoch: "2023-05-31T08:00:00Z",
                        number: [0, 0, 100, 120],
                    },
                    "Fairing Separate": {
                        epoch: "2023-05-31T08:00:00Z",
                        number: [0, 0, 60, -50],
                    },
                    "Fairing Drop": {
                        epoch: "2023-05-31T08:00:00Z",
                        interpolationAlgorithm: "LAGRANGE",//插值算法,这里使用拉格朗日插值算法
                        interpolationDegree: 1,//插值次数,表示使用1次插值
                        number: [0, 0, 30, -1, 45, -1, 60, -10, 100, -500],//关节动画的数值序列,用于控制关节动画的运动
                    },
                },
            },
            path: {//实体的路径属性,表示实体的运动轨迹
                show: true,
                resolution: 1,//路径的分辨率
                material: {//路径的材质属性
                    polylineGlow: {//光晕效果的材质
                        color: {
                            rgba: [255, 255, 0, 255]
                        },
                        glowPower: 0.1//光晕强度
                    }
                },
                width: 2,
                leadTime: 100,//路径的前导时间
                trailTime: 0,//路径的尾迹时间
                showForwardPath: true,//是否显示正向路径
                showBackwardPath: false//是否显示反向路径
            }
        }
];
const dataSourcePromise = viewer.value.dataSources.add(
    Cesium.CzmlDataSource.load(czml)
);

dataSourcePromise.then(function (dataSource) {
    const entity = dataSource.entities.getById("entity1");
    resolve(entity)
})
.catch(function (error) {
    console.error(error);
    reject(error)
});

这段代码实现了火箭模型的路径和过程中的动画

其中interpolationAlgorithm属性有两个可选值

"LINEAR"

        表示线性插值算法。该算法根据给定时间点处的关节角度,通过线性插值计算出其他时间点上的角度值。线性插值算法假设角度的变化率是匀速的

"LAGRANGE"

        表示拉格朗日插值算法。该算法使用拉格朗日插值多项式来计算给定时间点处的关节角度。拉格朗日插值算法通过使用离散时间点上的角度值,根据拉格朗日插值多项式的公式计算其他时间点上的角度值。拉格朗日插值算法可以提供更平滑和精确的插值效果,特别是当关节动画的运动过程中存在非线性的变化时。

        需要注意的是:拉格朗日插值算法在处理大量数据点时可能会受到龙格现象的影响,导致插值多项式的振荡现象。为了避免这种情况,可以考虑使用其他插值方法,如样条插值

interpolationDegree

        是用于指定拉格朗日插值算法中插值多项式的阶数或次数。它决定了插值多项式的复杂性和精度。

        取值通常是根据数据点的分布和插值的要求来选择的。较低的阶数会产生简单的插值多项式,但可能无法准确地拟合复杂的函数形状。较高的阶数可以提供更精确的插值结果,但会增加计算复杂性。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值