Cesium自定义电子围栏特效材质

1.new Cesium.Viewer中添加

requestWebgl1: true,

2. 编写材质,主要分三步

(1)定义MaterialProperty

(2)设置材质

(3)添加材质

//定义材质对象及变量
function DynamicWallMaterialProperty(color, duration) {this._definitionChanged = new Cesium.Event();this._color = undefined;this._colorSubscription = undefined;    this._time = (new Date()).getTime();this.color = color;this.duration = duration;}//Cesium.MaterialProperty是一个抽像类(https://cesium.com/learn/cesiumjs/ref-doc/MaterialProperty.html),//必须定义isConstant 、definitionChanged、equals()、getType()、getValue()//定义或修改材质属性Object.defineProperties(DynamicWallMaterialProperty.prototype, {isConstant: {get: function () {return false;}},definitionChanged: {get: function () {return this._definitionChanged;}},color: Cesium.createPropertyDescriptor('color')});//定义材质对象方法getTypeDynamicWallMaterialProperty.prototype.getType = function (time) {return 'DynamicWall';}//定义材质对象方法getValue,给下文的uniforms附值DynamicWallMaterialProperty.prototype.getValue = function (time, result) {if (!Cesium.defined(result)) {result = {};}result.color = Cesium.Property.getValueOrClonedDefault(this._color, time, Cesium.Color.WHITE, result.color);result.image = Cesium.Material.DynamicWallImage;result.time = (((new Date()).getTime() - this._time) % this.duration) / this.duration;return result;}//定义材质对象方法equalsDynamicWallMaterialProperty.prototype.equals = function (other) {return this === other || (other instanceof DynamicWallMaterialProperty && Property.equals(this._color, other._color))};Cesium.DynamicWallMaterialProperty = DynamicWallMaterialProperty;Cesium.Material.DynamicWallType = 'DynamicWall';Cesium.Material.DynamicWallImage = "src/assets/imgs/color.png";//图片Cesium.Material.DynamicWallSource =`czm_material czm_getMaterial(czm_materialInput materialInput){float time = czm_frameNumber/100.0;czm_material material = czm_getDefaultMaterial(materialInput);vec2 st = materialInput.st;vec4 colorImage = texture2D(image, vec2(fract(1.0*st.t - time), st.t));material.alpha = colorImage.a * color.a;material.diffuse = (colorImage.rgb+color.rgb)/2.0;return material;}`      //由上到下//添加自定义材质Cesium.Material._materialCache.addMaterial(Cesium.Material.DynamicWallType, {fabric: {//纹理类型type: Cesium.Material.DynamicWallType,//传递给着色器的外部属性uniforms: {color: new Cesium.Color(0.0, 0.0, 0.0, 1),image: Cesium.Material.DynamicWallImage,time: 0},//纹理资源source: Cesium.Material.DynamicWallSource},//是否透明translucent: function (material) {return true;}})export default DynamicWallMaterialProperty;

3.使用材质

import DynamicWallMaterialProperty from "../materials/DynamicWallMaterial.js";//...function CustomMaterialTest() {var dynamicWall = window.Viewer.entities.add({wall: {positions: Cesium.Cartesian3.fromDegreesArrayHeights([118.286419, 31.864436, 20000.0,119.386419, 31.864436, 20000.0,119.386419, 32.864436, 20000.0,118.286419, 32.864436, 20000.0,118.286419, 31.864436, 20000.0,]),material: new DynamicWallMaterialProperty(Cesium.Color.fromBytes(255, 200, 10).withAlpha(0.8), 30),}})window.Viewer.flyTo(dynamicWall)
}

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

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

相关文章

OpenHarmony—开发环境搭建

背景 因为没有实体的开发硬件,且不想破坏原有的Linux环境,所以这里基于 Docker QEMU 搭建开发环境 宿主机Linux系统命令行方式DockerQEMU 6.2 Docker环境准备 安装Docker 在Ubuntu中,可以使用下面的命令来安装Docker: sudo …

“华为杯”杭州电子科技大学2023新生编程大赛---树

题目链接 Problem Description 给定一棵包含 n 个节点的带边权的树,树是一个无环的无向联通图。定义 xordist(u,v) 为节点 u 到 v 的简单路径上所有边权值的异或和。 有 q 次询问,每次给出 l r x,求 ∑rilxordist(i,x) 的值。 Input 测试…

vuepress2 打包后刷新页面侧边栏丢失问题

问题:打包后刷新页面时侧边栏丢失问题 原因:node版本问题 文档中写着依赖环境 Node.js v18.16.0 我当时的版本是 16.19.0 我应该算是遇到了两个问题 【刷新后侧边栏消失】【刷新后页面内容加载错误】 我看了控制台,侧边栏不出现的原因&a…

我的隐私计算学习——联邦学习(1)

笔记内容来自多本书籍、学术资料、白皮书及ChatGPT等工具,经由自己阅读后整理而成。 六、联邦学习 笔记分享 | 组队学习密码学 —— 密码学在联邦学习中的应用 ​ 根据前文已经知道,隐私计算与联邦学习的结合是当前的一个热点,联邦学习原本…

Spring——Spring IOC(2)

1.Spring中的工厂类 1.1 ApplicationContext ApplicationContext的实现类,如下图: ClassPathXmlApplicationContext:加载类路径下 Spring 的配置文件FileSystemXmlApplicationContext:加载本地磁盘下 Spring 的配置文件 1.2 B…

excel公式名称管理器

1.问题 在日常使用excel的时候,发布一个表格文件,需要限制表格的某列或某行只能从我们提供的选项中选择,自己随便填写视为无效,如下图所示,上午的行程安排只能从"在岗"、"出差"、"病假"…

【BIAI】Lecture2-Visual system

Lecture 2 - Visual System 专业术语 central nervous system(CNS) 中枢神经系统 pupil 瞳孔 iris 虹膜 cornea 角膜 retina 视网膜 fovea 中央凹 或 黄斑区 kens 晶状体 optic nerve 视神经 Bipolar cells 双极细胞 Ganglion cells 神经节细胞 rods 杆状细胞 cones 锥状细胞 …

计算机创新协会冬令营——暴力枚举题目04

说句实话,单纯的暴力枚举题目太难找了┭┮﹏┭┮,接招吧~~ 题目 2094. 找出 3 位偶数 - 力扣(LeetCode) 给你一个整数数组 digits ,其中每个元素是一个数字(0 - 9)。数组中可能存在重复元素。…

入行IC,该如何规划学习和成长路线?

不同学历背景的同学会有不同的道路选择。 微电子/集成电路专业的科班生,已经拥有了理论知识基础,不需要再额外学习这一部分。所以精力主要聚焦在流片项目和集创赛一类的赛事上,重点在于如何拿到更好的Offer。 而电子大类以及其他相关专业的…

【LeetCode-剑指offer】--19.验证回文串II

19.验证回文串II 方法:双指针 首先考虑如果不允许删除字符,如何判断一个字符串是否是回文串。常见的做法是使用双指针。定义左右指针,初始时分别指向字符串的第一个字符和最后一个字符,每次判断左右指针指向的字符是否相同&#…

机器学习原理到Python代码实现之LinearRegression

Linear Regression 线性回归模型 该文章作为机器学习的第一篇文章,主要介绍线性回归模型的原理和实现方法。 更多相关工作请参考:Github 算法介绍 线性回归模型是一种常见的机器学习模型,用于预测一个连续的目标变量(也称为响应变…

对话惠买集团董事长兼CEO杜瑞勇:直播电商粗放时代结束,如何用AI+XR打造精细化的智慧直播生态?

“ 未来将是专业选手精细化运营的智慧直播时代。“ 整理 | 梦婕 编辑 | 渔舟 出品|极新&北京电子商务协会 直播电商在经过爆发式增长后,从业者不断涌入,竞争日趋激烈,行业发展必然将会进入到一个缓慢增长阶段。直播…