news 2026/6/15 14:41:31

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/6/13 17:26:17

浙江某酒店+RWA深度解读:3天5000万升级,入住率从68%到82%的转型之路

浙江一家拥有250间客房的中高端酒店,近期完成了一项创新的资金安排——3天内完成了5000万元的资金规划,用于全面升级智能化系统。他们采用的既不是传统银行贷款,也不是股权合作,而是一种相对新颖的方式:将未来部分客房…

作者头像 李华
网站建设 2026/6/14 13:49:48

独家披露:顶尖量子实验室使用的VSCode连接配置模板(限时公开)

第一章:VSCode 的量子硬件连接配置在现代量子计算开发中,Visual Studio Code(VSCode)已成为主流集成开发环境之一。通过扩展插件和底层API的集成,开发者能够直接从本地编辑器连接到真实的量子硬件设备,实现…

作者头像 李华
网站建设 2026/6/15 3:57:57

AI核心知识47——大语言模型之Data Cleaning(简洁且通俗易懂版)

数据清洗 (Data Cleaning),在大语言模型(LLM)的开发流程中,属于预训练之前的准备工作。如果说预训练是 AI 的“正餐”,那么数据清洗就是“备菜”——把买回来的菜里的烂叶子摘掉、泥土洗净、切好分类,确保 …

作者头像 李华
网站建设 2026/6/11 16:00:48

PMBOK第七版完整学习指南:免费获取中英文PDF资源

PMBOK第七版完整学习指南:免费获取中英文PDF资源 【免费下载链接】PMBOK第七版电子书资源 本仓库提供PMBOK(项目管理知识体系指南)第七版的英文版和中文版PDF电子书,以及详细的目录,方便用户快速查找和学习。新考纲主要…

作者头像 李华
网站建设 2026/6/15 9:01:02

终极指南:企业级AI网关的完整部署与实战应用

终极指南:企业级AI网关的完整部署与实战应用 【免费下载链接】litellm Call all LLM APIs using the OpenAI format. Use Bedrock, Azure, OpenAI, Cohere, Anthropic, Ollama, Sagemaker, HuggingFace, Replicate (100 LLMs) 项目地址: https://gitcode.com/GitH…

作者头像 李华
网站建设 2026/6/15 13:43:54

破茧与重生:AI 编程时代,程序员该何去何从?

我们从国内外开发者社区的真实讨论出发,看看这场 AI 编程革命,究竟正在怎样改变程序员的命运,以及我们如何抓住未来的方向。你还记得,你第一次敲下 Hello World 的那一刻吗?屏幕上那行简简单单的文字,像一扇…

作者头像 李华