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博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CF938Div3(A-F)

A: 买n个酸奶&#xff0c;一次一瓶a元,一次买两瓶可以优惠价b元,也可以a元,问恰好买n瓶需要多少钱. void solve() {int n, a, b;cin >> n >> a >> b;int ans min(a * n, n / 2 * b n % 2 * a);cout << ans << endl; } B: 给你一个数组,问能…

pdfjs-4.0.379-dist直接打开viewer.html报错

下载了pdfjs-4.0.379-dist&#xff0c;但是直接打开viewer.html报错。解决方法&#xff1a;安装live Sever&#xff0c;并用live Server打开 打开浏览器截图 错误提示如下&#xff1a; Access to image at file:///D:/work/web-common/car-knowledge-base-web/static/pdfjs-4…

OJ 栓奶牛【C】【Python】【二分算法】

题目 算法思路 要求的距离在最近木桩与最远木桩相隔距离到零之间&#xff0c;所以是二分法 先取一个中间值&#xff0c;看按照这个中间值可以栓多少奶牛&#xff0c;再与输入奶牛数比较&#xff0c;如果大于等于&#xff0c;则增大距离&#xff0c;注意这里等于也是增大距离…

AcWing1262.鱼塘钓鱼

【题目链接】1262. 鱼塘钓鱼 - AcWing题库 输入样例&#xff1a; 5 10 14 20 16 9 2 4 6 5 3 3 5 4 4 14输出样例&#xff1a; 76 【代码及详细注释】 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N110; int a[N],b[N],sp[N],d[N]…

Unity Pro 2019 for Mac:专业级游戏引擎,助力创意无限延伸!

Unity Pro 2019是一款功能强大的游戏开发引擎&#xff0c;其特点主要体现在以下几个方面&#xff1a; 强大的渲染技术&#xff1a;Unity Pro 2019采用了新的渲染技术&#xff0c;包括脚本化渲染流水线&#xff0c;能够轻松自定义渲染管线&#xff0c;通过C#代码和材料材质&…

Day36:LeedCode 435. 无重叠区间 763.划分字母区间 56. 合并区间 蓝桥杯 管道

435. 无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后&#xff0c;剩下的区间…

Python 编程 深入了解内存管理机制、深拷贝与浅拷贝

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、对象和引用、内存管理机制 Python 中的一切都是对象&#xff0c;包括数字、字符串、列表和函数等。为了简化内存管理并提高效率&#xff0c;Python 采用了统一的对象模型。在这个模型中&#xff0c…

c++——sort()函数

一、代码和效果 #include<bits/stdc.h> using namespace std;int main() {int a[6]{1,45,2,5,456,7};sort(a,a6);for(int i0; i<6; i){cout<<a[i]<<" "<<endl;}return 0; } 二、sort函数解析 &#xff08;从小到大&#xff09; std::so…

【C++】lambda表达式

目录 一、lambda表达式1.1 C98中的例子1.2 lambda表达式语法1.3 函数对象与lambda表达式 一、lambda表达式 1.1 C98中的例子 如果要对一个数据集合进行排序&#xff0c;可以使用sort函数&#xff1a; int main() {int array[] { 4,1,8,5,3,7,0,9,2,6 };// 默认按照小于比较…

15.leetcode---逆波兰表达式求值(Java版)

题目链接: https://leetcode.cn/problems/8Zf90G/description/ 题解: 栈 代码: 测试

并发编程——5.JMM、可见性和有序性及volatile的底层实现原理

这篇文章我们来讲一下JMM和其相关的内容。 目录 1.JMM模型的介绍 2.volatile的底层原理 3.有序性的介绍 3.1as-if-serial原则 3.2happen-before原则 4.内存屏障 5.小结 1.JMM模型的介绍 首先&#xff0c;我们来看一下JMM模型。 这是一张多核CPU的并发缓存架构图。我们…

CloudCompare——win11配置CloudComPy

CloudComPy配置 1 基本环境介绍2 安装Anaconda2.1 下载anaconda2.2 安装anaconda2.3 配置镜像源2.4 更改虚拟环境的默认创建位置2.5 其他问题2.5.1 激活自己创建的环境提示&#xff1a;系统找不到指定的路径2.5.2 InvalidVersionSpecError: Invalid version spec: 2.72.5.3 卸载…

JS-27-操作表单

用JavaScript操作表单和操作DOM是类似的&#xff0c;因为表单本身也是DOM树。 不过表单的输入框、下拉框等可以接收用户输入&#xff0c;所以用JavaScript来操作表单&#xff0c;可以获得用户输入的内容&#xff0c;或者对一个输入框设置新的内容。 一、HTML表单的输入控件 H…

Capture One 23 Enterprise for Mac中文版 全面的图像处理工具

Capture One 23 Enterprise for Mac中文版一款专业的图像编辑和管理软件&#xff0c;具备强大的功能和工具&#xff0c;适用于摄影师、摄影工作室和专业用户。 软件下载&#xff1a;Capture One 23 Enterprise for Mac中文版下载 该软件为用户提供了全面的图像处理工具&#xf…

fastapi的安装

使用pip安装 安装fastapi的语句 pip install fastapi 可以使用国内阿里云镜像源进行安装&#xff0c;会快很多 pip install fastapi -i https://mirrors.aliyun.com/pypi/simple api启动依赖于uvicorn&#xff0c;还需要安装uvicorn pip install uvicorn -i https://mirr…

Spring之AOP的详细讲解

目录 一.SpringAOP是什么&#xff1f; 1.1理论知识点 1.2简单的AOP例子 二.SpringAOP的核心概念 2.1切点(Pointcut) 2.2通知&#xff08;Advice&#xff09; 2.3切⾯(Aspect) 2.4通知类型 2.5切⾯优先级 Order 2.6切点表达式 2.6.1 execution表达式 2.6.2annotati…

PHP 伪协议:使用 php://input 访问原始 POST 数据

文章目录 参考环境PHP 伪协议概念为什么需要 PHP 伪协议&#xff1f; php://input为什么需要 php://input&#xff1f;更灵活的数据处理减小性能压力 发送 POST 数据HackBarHackBar 插件的获取 $_POST打开 HackBar 插件通过 HackBar 插件发起 POST 请求 基操 enable_post_data_…

【ros】结果实时在线可视化

文章目录 一、前言二、订阅与发布三、回调四、可视化 4.1、初始化参数4.2、初始化图片 4.3、画结果 4.4、可视化结果 一、前言 感知与规划控制是无人驾驶算法重要算法&#xff0c;在交付测试阶段也最容易引起摩擦&#xff0c;这也是司空见惯的现象。有时候可能是接口对齐问题…

AI绘画与建筑大师共创出的作品,震惊了?!

在CAD制图盛行的今天&#xff0c;手绘依然是许多建筑大师首选的灵感记录方式。建筑大师西扎曾说过&#xff1a;草图能迅速的记录下他思维的瞬间&#xff0c;并再一次激发他更深入的思考。 看完这些建筑大师的手稿&#xff0c;不得不让人表示&#xff1a;这和医生处方手迹简直有…

【满满干货】聚合接口—自动化工具㊣

背景 在介绍接口自动化之前先给大家分享一下我所理解的“业务中台”的概念&#xff1a;业务中台是将企业的核心能力以数字化形式沉淀为各种服务中心&#xff0c;其目的是“提供企业能够快速&#xff0c;低成本创新的能力”。 例如公司内部的业务a、业务b同时有订单、登录等功…