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

【超图】SuperMap iClient3D for WebGL/WebGPU ——暴雪

作者:taco

        时隔多年北京又开始降下了特大暴雪。身为打工人的你有没有居家办公呢?反正小编我是没有。既然没有借着暴雪的功劳居家办公,那就接着雪来输出一篇博客好了。基于SuperMap iClient3D for WebGL/WebGPU 实现暴雪仿真效果。


        先来看下效果

暴雪

1.修改天空盒子

        看看北京这天气,雾霾霾的。为了与真实场景去匹配可定去修改一下天空盒子让他也变成一个阴天。  

         天空盒子使用了SkyBox的方法直接加载本地资源的图片。资源图片分辨率没有过多的限制,但是由于外包围盒子是一个正方体的盒子,所以这里尽量保证边长一样分辨率长乘宽也保持一致。初始化好后我们直接将cloudyBox赋予scene.skyBox即可。

	var cloudyBox = new SuperMap3D.SkyBox({sources: {positiveX: './images/SkyBox/cloudy/Right.jpg',negativeX: './images/SkyBox/cloudy/Left.jpg',positiveY: './images/SkyBox/cloudy/Front.jpg',negativeY: './images/SkyBox/cloudy/Back.jpg',positiveZ: './images/SkyBox/cloudy/Up.jpg',negativeZ: './images/SkyBox/cloudy/Down.jpg'}});cloudyBox.show = true;scene.skyBox = cloudyBox;

2.场景

        光有雪没有下的地方也不行的啊,此时我们加载我们的模型至场景中。使用scene.open的方法可以直接打开我们的场景。场景中包含了楼房,树木、道路及湖。

scene.open("http://www.supermapol.com/realspace/services/3D-CBD-2/rest/realspace");

         场景加载完成后我们开启下雪接口即可。雪使用的viewer.scene.postProcessStages.snow这个方法去创建雪,主要应用的是PostProcessStage这个类去创建的特效。将物体进行一个描边。这里相关的api文档并没有,我们根据提供的方法进行说明一下。我们通过打印viewer.scene.postProcessStages.snow发现

density:密度

angle:角度

测试发现当角度的数值在0-2内都是向下飘落的雪花,如果是大于等于2则会向上飘走

speed:速度

修改速度的话,雪花的碎片会有明显的增多,但是与实际降落的速度还是有偏差的。

viewer.scene.postProcessStages.snow.uniforms.density = 10;
viewer.scene.postProcessStages.snow.uniforms.angle = 0;
viewer.scene.postProcessStages.snow.uniforms.speed = 3;

         上述操作只会影响到屏幕前的雪花特效的效果,并不会让地面上铺满雪花。那如何操作才能让地上铺满雪花呢。

        这里采用的是给图层赋予pbr。

	layer.setPBRMaterialFromJSON("./SampleData/pbr/MaterialJson/M_Brick_Clay_Old_.json");

        在去使用定时函数去更改pbr属性中PBRMaterialParam中的pbrMetallicRoughness.snowEffect降雪影响。如果想要修改地表变化的速度可以适当更改snow_coverage增加的大小。或者setInterval的速度。

let intervalValue = setInterval(() => {
if (layer._PBRMaterialParams.pbrMetallicRoughness.snowEffect !== undefined) {
layer._PBRMaterialParams.pbrMetallicRoughness.snowEffect.snow_coverage += 0.0006;
}
if (layer._PBRMaterialParams.pbrMetallicRoughness.snowEffect !== undefined &&
layer._PBRMaterialParams.pbrMetallicRoughness.snowEffect.snow_coverage - 1 > 0)
clearInterval(intervalValue);
}, 30)

        这样我们就完成了降雪的操作!还不快来试试!

         

相关文章:

  • C# WPF上位机开发(动态添加控件)
  • 【NTN 卫星通信】Starlink,费用、服务、市场(二)
  • JavaSE第7篇:封装
  • 使用ffmpeg命令进行视频格式转换
  • 单片机的低功耗模式介绍
  • Spring-整合MyBatis
  • 程序人生15年人生感悟
  • 代码随想录算法训练营第37天|● 738.单调递增的数字 ● 968.监控二叉树 ● 总结
  • 计算机网络 第四章(网络层)【下】
  • Java 内存模型(JMM)探寻原理,深度讲解
  • Android hwcomposer服务启动流程
  • B01、JVM与Java体系结构-01
  • 深入学习《大学计算机》系列之第1章 1.2节——问题描述与抽象
  • SearchWP WordPress高级网站内容搜索插件(包含所有专业扩展)
  • 2023年全球运维大会(GOPS深圳站)-核心PPT资料下载
  • CentOS 7 修改主机名
  • JSONP原理
  • React中的“虫洞”——Context
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Spring声明式事务管理之一:五大属性分析
  • sublime配置文件
  • Vue.js-Day01
  • Vue全家桶实现一个Web App
  • vue学习系列(二)vue-cli
  • Windows Containers 大冒险: 容器网络
  • 创建一种深思熟虑的文化
  • 从setTimeout-setInterval看JS线程
  • 技术:超级实用的电脑小技巧
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 详解移动APP与web APP的区别
  • 一道闭包题引发的思考
  • AI算硅基生命吗,为什么?
  • Hibernate主键生成策略及选择
  • Java数据解析之JSON
  • Python 之网络式编程
  • ​ArcGIS Pro 如何批量删除字段
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (3)STL算法之搜索
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (SpringBoot)第七章:SpringBoot日志文件
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (三)mysql_MYSQL(三)
  • (五)IO流之ByteArrayInput/OutputStream
  • (五)网络优化与超参数选择--九五小庞
  • (原)本想说脏话,奈何已放下
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)一些感悟
  • (转载)Linux 多线程条件变量同步
  • ***通过什么方式***网吧