news 2026/7/10 12:38:46

Cesium中实现流光线

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cesium中实现流光线

概要

Cesium中实现流光线,本质上是在特定的时间改变颜色等属性即可。可以通过MaterialProperty实现,但是它是用在Entity上的,如果要用Primitvie上就得通过自定义的Material实现。要想Material实现会动的效果,需要借助Cesium的一些内置函数实现,比如:czm_frameNumber等。

一、Primitive流光线

class SpriteLineMaterial extends Cesium.Material { constructor(options) { options = SpriteLineMaterial.getDefaultOptions(options) const props = { fabric: { type: SpriteLineMaterial.TYPE, uniforms: options, source: SpriteLineMaterial.SOURCE } } super(props) } } SpriteLineMaterial.SOURCE = ` czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; float time = czm_frameNumber * animationSpeed; // 获取小数部分,负数小数部分+1 float s = fract(st.s - time); vec4 colorImage = texture(image, vec2(s, st.t)); material.alpha = colorImage.a; // 混色 material.diffuse = mix(colorImage.rgb, baseColor.rgb, 1.0); // 光泽 material.emission = baseColor.rgb * 0.5; return material; } ` SpriteLineMaterial.getDefaultOptions = function (options) { return Object.assign({ // 一张线性渐变图片。颜色无所谓,但要有透明度;尺寸无所谓,比如:200*1 image: DEFAULT_SPRITE_LINE, animationSpeed: 0.01, baseColor: Cesium.Color.YELLOW, }, options) } SpriteLineMaterial.TYPE = 'SpriteLine' // 使用 const primitive = new Cesium.Primitive({ geometryInstances: [...], // MaterialAppearance,PolylineMaterialAppearance appearance: new Cesium.PolylineMaterialAppearance({ material: new SpriteLineMaterial(options) }) })

二、Entity流光线

class SpriteLineMaterialProperty { constructor(options) { this._definitionChanged = new Cesium.Event() this._time = performance.now() options = SpriteLineMaterial.getDefaultOptions(options) this._animationSpeed = options.animationSpeed this._baseColor = options.baseColor this._image = options.image // 主要是这里,其他的照搬Cesium相关的MaterialProperty代码即可 Cesium.Material._materialCache.addMaterial(SpriteLineMaterial.TYPE, { fabric: { type: SpriteLineMaterial.TYPE, uniforms: options, source: SpriteLineMaterial.SOURCE } }) } getType() { return SpriteLineMaterial.TYPE } ...... } Object.defineProperties(SpriteLineMaterial.prototype, { isConstant: { get: function() { return false } }, definitionChanged: { get: function() { return this._definitionChanged } }, ...... }) // 使用 const entity = new Cesium.Entity({ polyline: { material: new SpriteLineMaterialProperty(options), ...... } })

效果

复杂些的效果,可依据上述代码实现,此处仅作简单实现

Cesium中实现流光线

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 4:49:11

文理分科选对学习机:主流机型的适配指南

一、文理分科下,学习机选择的核心逻辑高中文科重知识体系构建、材料分析与表达输出,理科强逻辑拆解、错题闭环与实验理解,二者对学习机的需求存在本质差异:文科刚需:教材同步讲解的细致度、海量题库的分类检索&#xf…

作者头像 李华
网站建设 2026/7/9 21:57:11

深入探索 Spring Boot3 中 Profiles 多环境配置

前言在当今复杂的软件开发领域,一个应用往往需要在开发、测试、生产等多个环境中运行,每个环境的配置需求大相径庭。想象一下,在开发环境中,你可能需要频繁调试,所以希望日志更加详细,数据库连接到本地易于…

作者头像 李华
网站建设 2026/7/10 11:30:56

Wan2.2-T2V-A14B能否理解隐喻性语言?‘心如刀割’如何呈现?

Wan2.2-T2V-A14B能否理解“心如刀割”?当AI开始读懂你心里的痛 💔 你有没有试过把一句诗、一段情绪,丢进AI视频生成器里,然后期待它“懂你”? 比如输入“心如刀割”——不是字面意思的心脏被刀切开,而是一种…

作者头像 李华
网站建设 2026/7/9 12:42:45

spRAG开源项目:5分钟快速安装与使用终极指南

spRAG开源项目:5分钟快速安装与使用终极指南 【免费下载链接】spRAG RAG framework for challenging queries over dense unstructured data 项目地址: https://gitcode.com/gh_mirrors/sp/spRAG spRAG开源项目是一个专为处理复杂非结构化数据设计的检索增强…

作者头像 李华
网站建设 2026/7/9 21:42:44

【运维】StarRocks 跨集群数据迁移工具 - 基于快照进行的快速迁移

文章目录一、整体迁移逻辑1.1 架构概览1.2 核心工作流程阶段 1:初始化阶段 2:启动工作线程阶段 3:周期性执行1.3 任务生成逻辑1.3.1 元数据同步1.3.2 DDL 任务生成1.3.3 数据复制任务生成1.4 任务执行流程1.4.1 DDL 任务执行1.4.2 数据复制任…

作者头像 李华