news 2026/2/7 6:49:38

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/2/6 7:42:18

为什么你的图片选择器总是出问题?这5个预防技巧让Bug无处可逃

为什么你的图片选择器总是出问题?这5个预防技巧让Bug无处可逃 【免费下载链接】PictureSelector Picture Selector Library for Android or 图片选择器 项目地址: https://gitcode.com/gh_mirrors/pict/PictureSelector 你是否曾经遇到过这样的场景&#xff…

作者头像 李华
网站建设 2026/2/6 8:09:01

专业做PC耐力板的源头厂家哪个好

专业做PC耐力板的源头厂家哪个好?第一部分:痛点深度剖析我们团队在实践中发现,当前PC耐力板行业存在诸多技术困境。许多PC耐力板在使用一段时间后,会出现发黄、老化的现象,影响其美观和使用寿命。而且,一些…

作者头像 李华
网站建设 2026/2/6 10:00:54

Wan2.2-T2V-A14B生成丝绸之路历史变迁动态地图

Wan2.2-T2V-A14B生成丝绸之路历史变迁动态地图:技术深度解析 你有没有想过,一条横跨欧亚大陆的古老商路——丝绸之路,能被一段AI生成的视频“活”过来?不是静态地图,也不是教科书上的文字描述,而是从汉代张…

作者头像 李华
网站建设 2026/2/6 8:15:41

[Windows] 自动剪辑音频气口空隙工具

[Windows] 自动剪辑音频气口空隙工具 链接:https://pan.xunlei.com/s/VOgBhFrlYgGLmpB3TdVHnw5tA1?pwdsmes# [Windows] 自动剪辑音频气口空隙工具,常用于剪辑信息流的小伙伴可能会用到

作者头像 李华
网站建设 2026/2/6 7:56:32

ANTLR4 C++目标终极实战指南:从零构建高性能语法解析器

ANTLR4 C目标终极实战指南:从零构建高性能语法解析器 【免费下载链接】antlr4 ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files. 项目地址:…

作者头像 李华
网站建设 2026/2/6 8:17:28

小兔鲜儿UniApp微信小程序开发实战:从零到上线的完整指南

小兔鲜儿UniApp微信小程序开发实战:从零到上线的完整指南 【免费下载链接】uniapp-shop-vue3-ts 小兔鲜儿-vue3ts-uniapp 项目已上线,小程序搜索《小兔鲜儿》即可体验。🎉🎉🎉 配套项目接口文档,配套笔记。…

作者头像 李华