当前位置: 首页 > news >正文

前端~三维地图(cesium)动态材质扩散圆环

定义自定义材质
import * as Cesium from "cesium";// 着色器代码抽离为常量
const DiffuseCircleShaderSource = `uniform vec4 color;uniform float speed;uniform float count;uniform float gradient;czm_material czm_getMaterial(czm_materialInput materialInput){czm_material material = czm_getDefaultMaterial(materialInput);material.diffuse = 1.5 * color.rgb;vec2 st = materialInput.st;float dis = distance(st, vec2(0.5, 0.5));float per = fract(czm_frameNumber * speed / 1000.0);if(count == 1.0){if(dis > per * 0.5){discard;} else {material.alpha = color.a * dis / per / 2.0;}} else {vec3 str = materialInput.str;if(abs(str.z) > 0.001){discard;}if(dis > 0.5){discard;} else {float perDis = 0.5 / count;float disNum;float bl = 0.0;for(int i = 0; i <= 999; 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, (1.0 + 10.0 * (1.0 - gradient)));}}}}}return material;}
`;// 参数类型定义
type DiffuseCircleOptions = {color: Cesium.Color;speed: number;circleCount: number;gradient: number;
};// 材质类定义
export class DiffuseCircleMaterial extends Cesium.Material {constructor(options: DiffuseCircleOptions) {const { color, speed, circleCount, gradient } = options; // 解构参数super({translucent: false,fabric: {type: "DiffuseCircle",uniforms: {color,speed,count: circleCount,gradient,},source: DiffuseCircleShaderSource, // 使用抽离的着色器代码},});}
}
调用自定义材质
// 测试自定义材质const circleGeometry = new Cesium.CircleGeometry({center: Cesium.Cartesian3.fromDegrees(125.310767, 43.820491, 1000000),radius: 10000,});const circleInstance = new Cesium.GeometryInstance({geometry: circleGeometry,});// 创建外观const appearance = new Cesium.EllipsoidSurfaceAppearance({material: new DiffuseCircleMaterial({color: new Cesium.Color(1.0, 0.0, 0.0, 1.0),speed: 5.0,circleCount: 5,gradient: 0.4,}),});// 创建圆形图元const circlePrimitive = new Cesium.Primitive({geometryInstances: circleInstance,appearance: appearance,});// 添加到场景viewer.scene.primitives.add(circlePrimitive);
http://www.xdnf.cn/news/443341.html

相关文章:

  • 高等数学第七章---微分方程(§7.4-§7.5可降阶的高阶微分方程、二阶线性微分方程)
  • 在window中 js 编写一个全局触发事件并携带参数
  • EC600X 开发板介绍
  • 从入门到精通:阿里云/腾讯云服务器深度优化实践
  • bfs-最小步数问题
  • 基于单片机的车灯智能控制系统设计与实现
  • 技术选型不当,如何避免影响项目进展
  • 【python编程从入门到到实践】第七章用户输入和while循环
  • 黑马k8s(六)
  • 解决SQL Server SQL语句性能问题(9)——合理使用表分区
  • CentOS7原有磁盘扩容实战记录(LVM非LVM)【针对GPT分区】
  • QMK RGB矩阵灯效配置详解:从理论到实践(实操部分)
  • 共享代理IP vs 动态IP:企业级业务场景的选型深度解析
  • 通过Ollama读取模型
  • attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作获取第二维度,第三维度
  • 速查 Linux 常用指令 II
  • 初识C++:类和对象(上)
  • Nexus首次亮相迪拜 TOKEN2049:以“手机 + 钱包 + 公链 + RWA”生态系统引领未来区块链基建
  • C++GO语言微服务之Dockerfile docker-compose②
  • Screen Mirroring App:轻松实现手机与电视的无缝投屏
  • idea springboot 配置文件 中文显示
  • OpenHarmony平台驱动开发(十七),UART
  • DFS算法的学习
  • PyTorch深度神经网络(前馈、卷积神经网络)
  • JVM调优实战
  • 面试--HTML
  • OpenCV CUDA模块中逐元素操作------逻辑运算
  • 代码随想录算法训练营第四十天
  • ubuntu24.04上安装NVIDIA driver+CUDA+cuDNN+Anaconda+Pytorch
  • Webpack其他插件