cesium 添加动态波纹效果 圆形扩散效果 波纹材质

一、扩展材质

/*** 水波纹扩散材质* @param {*} options* @param {String} options.color 颜色* @param {Number} options.duration 持续时间 毫秒* @param {Number} options.count 波浪数量* @param {Number} options.gradient 渐变曲率*/function CircleWaveMaterialProperty(options) {this._definitionChanged = new Cesium.Event();this.color = Cesium.defaultValue(options.color && new Cesium.Color.fromCssColorString(options.color), Cesium.Color.RED);this.duration = Cesium.defaultValue(options.duration, 1000);this.count = Cesium.defaultValue(options.count, 2);if (this.count <= 0) {this.count = 1;}this.gradient = Cesium.defaultValue(options.gradient, 0.1);if (this.gradient > 1) {this.gradient = 1;}this.time = new Date().getTime();}Object.defineProperties(CircleWaveMaterialProperty.prototype, {isConstant: {get: function () {return false;},},definitionChanged: {get: function () {return this._definitionChanged;},},color: Cesium.createPropertyDescriptor('color'),gradient: Cesium.createPropertyDescriptor('gradient'),duration: Cesium.createPropertyDescriptor('duration'),count: Cesium.createPropertyDescriptor('count'),});CircleWaveMaterialProperty.prototype.getType = function () {return Cesium.Material.CircleWaveMaterialType;};CircleWaveMaterialProperty.prototype.getValue = function (time, result) {if (!Cesium.defined(result)) {result = {};}result.color = Cesium.Property.getValueOrClonedDefault(this.color, time, Cesium.Color.WHITE, result.color);result.time = ((new Date().getTime() - this.time) % this.duration) / this.duration;result.count = this.count;result.gradient = 1 + 10 * (1 - this.gradient);return result;};CircleWaveMaterialProperty.prototype.equals = function (other) {const reData =this === other ||(other instanceof CircleWaveMaterialProperty&& Cesium.Property.equals(this.color, other.color)&& Cesium.Property.equals(this.duration, other.duration)&& Cesium.Property.equals(this.count, other.count)&& Cesium.Property.equals(this.gradient, other.gradient));return reData;};Cesium.CircleWaveMaterialProperty = CircleWaveMaterialProperty;Cesium.Material.CircleWaveMaterialType = 'CircleWaveMaterial';Cesium.Material.CircleWaveSource = `czm_material czm_getMaterial(czm_materialInput materialInput) {czm_material material = czm_getDefaultMaterial(materialInput);material.diffuse = 1.5 * color.rgb;vec2 st = materialInput.st;vec3 str = materialInput.str;float dis = distance(st, vec2(0.5, 0.5));float per = fract(time);if (abs(str.z) > 0.001) {discard;}if (dis > 0.5) {discard;} else {float perDis = 0.5 / count;float disNum;float bl = .0;for (int i = 0; i <= 9; i++) {if (float(i) <= count) {disNum = perDis *float(i) - dis + per / count;if (disNum > 0.0) {if (disNum < perDis) {bl = 1.0 - disNum / perDis;} else if(disNum - perDis < perDis) {bl = 1.0 - abs(1.0 - disNum / perDis);}material.alpha = pow(bl, gradient);}}}}return material;}`;Cesium.Material._materialCache.addMaterial(Cesium.Material.CircleWaveMaterialType, {fabric: {type: Cesium.Material.CircleWaveMaterialType,uniforms: {color: new Cesium.Color(181, 241, 254, 1),time: 1,count: 1,gradient: 0.1,},source: Cesium.Material.CircleWaveSource,},translucent: function () {return true;},});

二、调用:添加entity 

viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(longitude, latitude, height),ellipse: {semiMinorAxis: 10,semiMajorAxis: 10,height: height,material: new Cesium.CircleWaveMaterialProperty({color: '#FFCB33',duration: 1000,gradient: 0,count: 3,}),},})

电子围栏效果参考:cesium 动态墙效果 电子围栏效果-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/619481.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMC学习系列 (9):对侧半球可能支持中风后的恢复

对侧半球可能支持中风后的恢复 0. 引言1. 主要贡献2. 方法2.1 患者信息2.2 行为测试2.3 运动任务/实验范式 3. 结果3.1 对照参与者和卒中患者的相干图3.2 地形图上的CMC标签 4. 讨论5. 总结欢迎来稿 论文地址&#xff1a;https://www.sciencedirect.com/science/article/pii/S2…

golang 使用栈模拟计算器

思路&#xff1a; // Author sunwenbo // 2024/4/12 16:51 package mainimport ("errors""fmt""strconv" )// 使用数组来模拟一个栈的应用 type Stack struct {MaxTop int //表示栈最大可以存放数的个数Top int //表示栈底&#xff…

【方法】如何打开ZIP分卷压缩文件?

ZIP分卷压缩文件&#xff0c;是指在压缩文件时&#xff0c;将文件压缩成若干个ZIP格式的小压缩包&#xff0c;便于储存和传送&#xff0c;这些小压缩包可以被当作一个完整的文件来处理。那ZIP分卷压缩文件要怎么打开呢&#xff1f;不清楚的小伙伴一起来看看吧&#xff01; 首先…

星邦生化设备有限公司将出席2024第13届生物发酵展

参展企业介绍 宁波星邦生化设备有限公司&#xff0c;致力于发酵空气处理、发酵尾气处理及发酵罐节能环保装备的研发制造达30余年。公司拥有20多项自主开发的具有竞争力的国家发明专利技术及核心专有技术。连续三届被中国生物发酵产业协会评为——节能环保重点推荐企业。公司用…

LeetCode 678——有效的括号字符串

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 需要两个栈&#xff0c;一个用来保存左括号所在的位置索引&#xff0c;一个用来保存星号所在的位置索引。 从左往右遍历字符串&#xff0c;如果是左括号或者星号&#xff0c;则将位置索引分别入栈&#xff0c;如…

碧桂园服务:政企联合,助力秭归脐橙销售

4月9日&#xff0c;秭归县农业农村局与碧桂园服务智享楼下心选签订了秭归伦晚脐橙助农合作项目。 秭归县农业农村局现场对接碧桂园服务集团智享心选全国十二个重点区域核心业主代表&#xff0c;并授予他们“秭归伦晚脐橙推广大使”证书&#xff0c;每位代表都变成了秭归伦晚脐橙…

【Next】动态路由、加载 UI 和流式传输

动态路由 动态段作为 params 属性传递给 layout、page、route 和 generateMetadata 函数。 /app/blog/[slug]/page.tsx export default function Page({params}: {params:{slug:string}}) {return <h1>Slug Page -- {params.slug}</h1> };/app/shop/[...slug]/pa…

Chatgpt掘金之旅—有爱AI商业实战篇|播客剧本写作|(十三)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业播客剧本写作服务有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。…

Scaffold-GS 代码阅读笔记

1. 系统启动部分 使用 python 中的 parser 库 为配置系统的参数设定, 和3DGS 类似&#xff0c;并且使用safe_state(args.quiet) 函数 为每一次的 log 输出加上对应的 时间戳 ## 配置参数的设定lp ModelParams(parser)op OptimizationParams(parser)pp PipelineParams(pars…

面试经典算法系列之二叉数6 -- 二叉树的右视图

面试经典算法21 - 二叉树的右视图 LeetCode.199 公众号&#xff1a;阿Q技术站 问题描述 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4]…

数字乡村创新实践探索农业现代化与乡村振兴新路径:科技赋能农村全面振兴与农民幸福新篇章

随着信息技术的飞速发展&#xff0c;数字乡村成为推动农业现代化与乡村振兴的重要战略举措。科技赋能下的数字乡村创新实践&#xff0c;不仅提升了农业生产的智能化水平&#xff0c;也为乡村治理和农民生活带来了翻天覆地的变化。本文旨在探讨数字乡村创新实践在农业现代化与乡…

80% 的人都不会的 15 个 Linux 实用技巧

熟悉 Linux 系统的同学都知道&#xff0c;它高效主要体现在命令行。通过命令行&#xff0c;可以将很多简单的命令&#xff0c;通过自由的组合&#xff0c;得到非常强大的功能。 命令行也就意味着可以自动化&#xff0c;自动化会使你的工作更高效&#xff0c;释放很多手工操作&…