news 2026/4/25 6:29:26

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/4/16 14:22:01

Docker部署边缘Agent常见问题解析(避坑指南+性能调优)

第一章:边缘 Agent 的 Docker 轻量级部署概述在物联网与边缘计算快速发展的背景下,边缘 Agent 作为连接终端设备与云端服务的核心组件,其部署效率与资源占用成为关键考量因素。Docker 容器化技术凭借轻量、可移植和隔离性强的优势&#xff0c…

作者头像 李华
网站建设 2026/4/21 0:00:03

轻量文件加密软件推荐:2025 年 5 款不占内存软件实测

在数据安全愈发重要的当下,轻量不占内存的文件加密工具成为刚需。2025 年实测 5 款优质软件,它们兼顾加密强度与运行效率,无需复杂配置即可快速上手,适配个人办公与小型团队协作场景,帮你轻松守护文件隐私,…

作者头像 李华
网站建设 2026/4/18 8:16:30

VSCode中实现量子电路仿真的完整路径(量子开发者的隐藏武器)

第一章:VSCode中实现量子电路仿真的完整路径(量子开发者的隐藏武器)在现代量子计算开发中,VSCode 已成为开发者不可或缺的集成环境。结合强大的扩展生态与开源量子框架,它为构建、仿真和调试量子电路提供了前所未有的便…

作者头像 李华
网站建设 2026/4/21 3:52:46

阿里一面灵魂一问:RPC或者HTTP什么时候需要序列化和反序列化?

有位读者问了,我这么一个问题: 不管是 RPC 或者 HTTP,只要传输的内容是「对象」,要想在接收方还原出一摸一样的「对象」,那就需要序列化和反序列化。 那什么是序列化和反序列化呢? RPC 能帮助我们的应用透明…

作者头像 李华
网站建设 2026/4/25 5:10:27

【Mac使用Z-Image生图教程】Draw Things配置方法与真实测试效果 Mac 下如何使用 Z-Image-Turbo?从安装到生图的完整教程

【Mac使用Z-Image生图教程】Draw Things配置方法与真实测试效果 关键词:Z-Image Turbo、Mac生图教程、Draw Things配置、阿里通义、AI绘图模型、Mac本地AI画图、AI生成图片、模型安装、Z Image Turbo使用方法 作为一名程序员,我天生对「大模型本地能不能…

作者头像 李华
网站建设 2026/4/18 1:57:58

(15)抽象工厂模式(了解)

抽象工厂模式相对于工厂方法模式来说,就是工厂方法模式是针对一个产品系列的,而抽象工厂模式是针对多个产品系列的,即工厂方法模式是一个产品系列一个工厂类,而抽象工厂模式是多个产品系列一个工厂类。 抽象工厂模式特点&#xff…

作者头像 李华