shader/shadertoy移植/20241203_143947.html
严争鸣 36b5eb0abb init
2024-12-09 14:57:06 +08:00

1721 lines
200 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<link rel="canonical" href="https://blog.csdn.net/weixin_43700915/article/details/142754373"/>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="renderer" content="webkit"/>
<meta name="force-rendering" content="webkit"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="report" content='{"pid": "blog", "spm":"1001.2101"}'>
<meta name="referrer" content="always">
<meta http-equiv="Cache-Control" content="no-siteapp" /><link rel="alternate" media="handheld" href="#" />
<meta name="shenma-site-verification" content="5a59773ab8077d4a62bf469ab966a63b_1497598848">
<meta name="applicable-device" content="pc">
<link href="https://g.csdnimg.cn/static/logo/favicon32.ico" rel="shortcut icon" type="image/x-icon" />
<title>Cesium进阶学习四、shadertoy着色器_cesium 着色器-CSDN博客</title>
<meta name="keywords" content="cesium 着色器">
<meta name="csdn-baidu-search" content='{"autorun":true,"install":true,"keyword":"cesium 着色器"}'>
<meta name="description" content="文章浏览阅读1.9k次点赞23次收藏12次。Cesium进阶学习着色器_cesium 着色器">
<link rel="stylesheet" type="text/css" href="https://csdnimg.cn/release/blogv2/dist/pc/css/detail_enter-62005624ac.min.css">
<link rel="stylesheet" type="text/css" href="https://csdnimg.cn/release/blogv2/dist/pc/themesSkin/skin-whitemove/skin-whitemove-2af9149bdc.min.css">
<meta name="toolbar" content='{"type":"0","fixModel":"1"}'>
<link rel="stylesheet" type="text/css" href="https://csdnimg.cn/public/sandalstrap/1.4/css/sandalstrap.min.css">
<style>
.MathJax, .MathJax_Message, .MathJax_Preview{
display: none
}
</style>
</head>
<body class="nodata " style="">
<div id="toolbarBox" style="min-height: 48px;"></div>
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/pc/css/blog_code-01256533b5.min.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/chart-3456820cac.css" />
<link rel="stylesheet" href="https://g.csdnimg.cn/lib/swiper/6.0.4/css/swiper.css" />
<div class="main_father clearfix d-flex justify-content-center mainfather-concision" style="height:100%;">
<div class="container clearfix container-concision" id="mainBox">
<main>
<div class="blog-content-box">
<div class="article-header-box">
<div class="article-header">
<div class="article-title-box">
<h1 class="title-article" id="articleContentId">Cesium进阶学习四、shadertoy着色器</h1>
</div>
<div class="article-info-box">
<div class="up-time">最新推荐文章于&nbsp;2024-10-15 11:50:42&nbsp;发布</div>
<div class="article-bar-top">
<img class="article-type-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/original.png" alt="">
<div class="bar-content">
<a href="https://mall.csdn.net/vip" data-report-query="spm=3001.10404" data-report-click='{"spm":"3001.10404"}' data-report-view='{"spm":"3001.10404"}' class="article-vip-box" target="_blank"><img class="article-vip-img-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/identityVipNew.png" alt=""></a>
<a class="follow-nickName " href="https://blog.csdn.net/weixin_43700915" target="_blank" rel="noopener" title="Cesium进阶学习">Cesium进阶学习</a>
<img class="article-time-img article-heard-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCurrentTime2.png" alt="">
<span class="time blog-postTime" data-time="2024-10-08 11:41:08">最新推荐文章于&nbsp;2024-10-15 11:50:42&nbsp;发布</span>
<div class="read-count-box">
<img class="article-read-img article-heard-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/articleReadEyes2.png" alt="">
<span class="read-count">阅读量1.9k</span>
<a id="blog_detail_zk_collection" class="un-collection" data-report-click='{"mod":"popu_823","spm":"1001.2101.3001.4232","ab":"new"}'>
<img class="article-collect-img article-heard-img un-collect-status isdefault" style="display:inline-block" src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarCollect2.png" alt="">
<img class="article-collect-img article-heard-img collect-status isactive" style="display:none" src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarCollectionActive2.png" alt="">
<span class="name">收藏</span>
<span class="get-collection">
12
</span>
</a>
<div class="read-count-box is-like">
<img class="article-read-img article-heard-img" style="display:none" id="is-like-imgactive-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newHeart2023Active.png" alt="">
<img class="article-read-img article-heard-img" style="display:block" id="is-like-img-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newHeart2023Black.png" alt="">
<span class="read-count" id="blog-digg-num">点赞数
23
</span>
</div>
</div>
</div>
</div>
<div class="blog-tags-box">
<div class="tags-box artic-tag-box">
<span class="label">分类专栏:</span>
<a class="tag-link" href="https://blog.csdn.net/weixin_43700915/category_12801806.html" target="_blank" rel="noopener">Cesium进阶学习</a>
<span class="label">文章标签:</span>
<a rel="nofollow" data-report-query="spm=1001.2101.3001.4223" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"学习","ab":"new","extra":"{\"searchword\":\"学习\"}"}' data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"学习","ab":"new","extra":"{\"searchword\":\"学习\"}"}' class="tag-link" href="https://so.csdn.net/so/search/s.do?q=%E5%AD%A6%E4%B9%A0&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" target="_blank" rel="noopener">学习</a>
<a rel="nofollow" data-report-query="spm=1001.2101.3001.4223" data-report-click='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"着色器","ab":"new","extra":"{\"searchword\":\"着色器\"}"}' data-report-view='{"mod":"popu_626","spm":"1001.2101.3001.4223","strategy":"着色器","ab":"new","extra":"{\"searchword\":\"着色器\"}"}' class="tag-link" href="https://so.csdn.net/so/search/s.do?q=%E7%9D%80%E8%89%B2%E5%99%A8&amp;t=all&amp;o=vip&amp;s=&amp;l=&amp;f=&amp;viparticle=&amp;from_tracking_code=tag_word&amp;from_code=app_blog_art" target="_blank" rel="noopener">着色器</a>
</div>
</div>
<div class="slide-content-box">
<div class="article-copyright">
<div class="creativecommons">
版权声明:本文为博主原创文章,遵循<a href="http://creativecommons.org/licenses/by-sa/4.0/" target="_blank" rel="noopener"> CC 4.0 BY-SA </a>版权协议,转载请附上原文出处链接和本声明。
</div>
<div class="article-source-link">
本文链接:<a href="https://blog.csdn.net/weixin_43700915/article/details/142754373" target="_blank">https://blog.csdn.net/weixin_43700915/article/details/142754373</a>
</div>
</div>
</div>
<div class="operating">
<a class="href-article-edit slide-toggle">版权</a>
</div>
</div>
</div>
</div>
<div id="blogHuaweiyunAdvert"></div>
<article class="baidu_pl">
<div id="article_content" class="article_content clearfix">
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/kdoc_html_views-1a98987dfd.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-704d5b9767.css">
<div id="content_views" class="markdown_views prism-atom-one-light">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<p><strong>一、简介</strong><br /> <a href="https://www.shadertoy.com/" rel="nofollow">shadertoy</a>是一个基于webgl的分享Shader的开放平台&#xff0c;用户可以在上面根据既定规则分享自己编写的shader。在Cesium中要想实现一些酷炫的效果&#xff0c;唯一的一条路就是写shader&#xff0c;而shader的编写应该算是图形学中的难度天花板了。好在有很多shader大佬分享了自己编写的glsl效果&#xff0c;比如shadertoy网站上就是这些大牛们的作品&#xff0c;我们可以借鉴。<br /> <img src="https://img-blog.csdnimg.cn/img_convert/c1eeb7716326293e03113f99c49eda30.png#pic_center" alt="在这里插入图片描述" /></p>
<p><strong>二、shadertoy着色器基本结构</strong></p>
<p>shadertoy上的shader是纯2d绘图&#xff0c;没有几何顶点这些概念&#xff0c;它的绘图方式和canvas绘图方式很像&#xff0c;它将整个canvas作为绘图的画布&#xff0c;所以输入参数fragCoord的x值范围是&#xff08;0&#xff0c;画布的宽度&#xff09;&#xff0c;fragCoord的y值范围是&#xff08;0&#xff0c;画布的高度&#xff09;&#xff0c;画布的宽高在定义的输入参数中是iResolution&#xff0c;所以fragCoord.x范围就是(0,iResolution.x),fragCoord.y范围就是(0,iResolution.y)。<br /> <img src="https://img-blog.csdnimg.cn/img_convert/8103ee5541c006dfb125fbe2e78ed87d.png#pic_center" alt="在这里插入图片描述" /></p>
<p>如图所示&#xff0c;shadertoy上的shader示例最基本的着色器结构主要包括两个部分&#xff1a;<br /> a、输入参数的定义<br /> b、着色器的入口函数</p>
<p>1、输入参数&#xff0c;通过uniform来定义外部的输入值。</p>
<pre><code class="prism language-java" style="height: 25vh;">uniform vec3 iResolution<span class="token punctuation">;</span> <span class="token comment">// 视口分辨率&#xff0c;即画布的宽高</span>
uniform <span class="token keyword">float</span> iTime<span class="token punctuation">;</span> <span class="token comment">// shader 的运行时间 秒</span>
uniform <span class="token keyword">float</span> iTimeDelta<span class="token punctuation">;</span> <span class="token comment">// 渲染时间 秒</span>
uniform <span class="token keyword">float</span> iFrameRate<span class="token punctuation">;</span> <span class="token comment">// shader 帧率</span>
uniform <span class="token keyword">int</span> iFrame<span class="token punctuation">;</span> <span class="token comment">// shader 帧率</span>
uniform <span class="token keyword">float</span> iChannelTime<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 频道运行时间 不管</span>
uniform vec3 iChannelResolution<span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 频道分辨率 不管</span>
uniform vec4 iMouse<span class="token punctuation">;</span> <span class="token comment">// 鼠标坐标</span>
uniform samplerXX iChannel0<span class="token punctuation">.</span><span class="token number">.3</span><span class="token punctuation">;</span> <span class="token comment">// 输入的纹理 比如我们从一张图片上采用颜色</span>
uniform vec4 iDate<span class="token punctuation">;</span> <span class="token comment">// 日期 年月日 不管</span>
uniform <span class="token keyword">float</span> iSampleRate<span class="token punctuation">;</span> <span class="token comment">// 声音采样 不管</span>
</code></pre>
<p>2、入口函数mainImage</p>
<pre><code class="prism language-java" style="height: 25vh;"><span class="token keyword">void</span> <span class="token function">mainImage</span><span class="token punctuation">(</span>out vec4 fragColor<span class="token punctuation">,</span> in vec2 fragCoord <span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
fragColor <span class="token operator">&#61;</span> <span class="token function">vec4</span><span class="token punctuation">(</span><span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>方法的第一个参数fragColor,是一个vec4类型的变量&#xff0c;表示最后输出的颜色值。<br /> 方法的第二个参数fragCoord&#xff0c;是一个vec2类型的变量&#xff0c;表示输入的像素坐标。</p>
<p><strong>三、在cesium中如何使用</strong></p>
<p>shadertoy上的着色器是在一个canvas画布上进行工作的&#xff0c;要移植到Cesium中&#xff0c;我们需要找一个载体来替代canvas。我们知道&#xff0c;Cesium绘制几何图形可以通过Entity和Primitive两种方式&#xff0c;那么只有Primitive&#43;Appearance比较合适了,关于Primitive的使用及介绍&#xff0c;可以观看前面的章节。要将着色器移植到Cesium中&#xff0c;我们先来重点看看shadertoy上的shader着色器需要用到的参数。以下面这个例子讲解https://www.shadertoy.com/view/XdlSDs<br /> <img src="https://img-blog.csdnimg.cn/img_convert/71d7b7a8f35a02471424f5185d0ecbdb.png#pic_center" alt="在这里插入图片描述" /></p>
<p>glsl代码&#xff1a;</p>
<pre><code class="prism language-java" style="height: 25vh;"><span class="token keyword">void</span> <span class="token function">mainImage</span><span class="token punctuation">(</span>out vec4 fragColor<span class="token punctuation">,</span> in vec2 fragCoord <span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
vec2 p <span class="token operator">&#61;</span> <span class="token punctuation">(</span><span class="token number">2.0</span><span class="token operator">*</span>fragCoord<span class="token punctuation">.</span>xy<span class="token operator">-</span>iResolution<span class="token punctuation">.</span>xy<span class="token punctuation">)</span><span class="token operator">/</span>iResolution<span class="token punctuation">.</span>y<span class="token punctuation">;</span>
<span class="token keyword">float</span> tau <span class="token operator">&#61;</span> <span class="token number">3.1415926535</span><span class="token operator">*</span><span class="token number">2.0</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> a <span class="token operator">&#61;</span> <span class="token function">atan</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span>x<span class="token punctuation">,</span>p<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> r <span class="token operator">&#61;</span> <span class="token function">length</span><span class="token punctuation">(</span>p<span class="token punctuation">)</span><span class="token operator">*</span><span class="token number">0.75</span><span class="token punctuation">;</span>
vec2 uv <span class="token operator">&#61;</span> <span class="token function">vec2</span><span class="token punctuation">(</span>a<span class="token operator">/</span>tau<span class="token punctuation">,</span>r<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//get the color</span>
<span class="token keyword">float</span> xCol <span class="token operator">&#61;</span> <span class="token punctuation">(</span>uv<span class="token punctuation">.</span>x <span class="token operator">-</span> <span class="token punctuation">(</span>iTime <span class="token operator">/</span> <span class="token number">3.0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">3.0</span><span class="token punctuation">;</span>
xCol <span class="token operator">&#61;</span> <span class="token function">mod</span><span class="token punctuation">(</span>xCol<span class="token punctuation">,</span> <span class="token number">3.0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 horColour <span class="token operator">&#61;</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">0.25</span><span class="token punctuation">,</span> <span class="token number">0.25</span><span class="token punctuation">,</span> <span class="token number">0.25</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>xCol <span class="token operator">&lt;</span> <span class="token number">1.0</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
horColour<span class="token punctuation">.</span>r <span class="token operator">&#43;&#61;</span> <span class="token number">1.0</span> <span class="token operator">-</span> xCol<span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>g <span class="token operator">&#43;&#61;</span> xCol<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>xCol <span class="token operator">&lt;</span> <span class="token number">2.0</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
xCol <span class="token operator">-&#61;</span> <span class="token number">1.0</span><span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>g <span class="token operator">&#43;&#61;</span> <span class="token number">1.0</span> <span class="token operator">-</span> xCol<span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>b <span class="token operator">&#43;&#61;</span> xCol<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">else</span> <span class="token punctuation">{<!-- --></span>
xCol <span class="token operator">-&#61;</span> <span class="token number">2.0</span><span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>b <span class="token operator">&#43;&#61;</span> <span class="token number">1.0</span> <span class="token operator">-</span> xCol<span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>r <span class="token operator">&#43;&#61;</span> xCol<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// draw color beam</span>
uv <span class="token operator">&#61;</span> <span class="token punctuation">(</span><span class="token number">2.0</span> <span class="token operator">*</span> uv<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">1.0</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> beamWidth <span class="token operator">&#61;</span> <span class="token punctuation">(</span><span class="token number">0.7</span><span class="token operator">&#43;</span><span class="token number">0.5</span><span class="token operator">*</span><span class="token function">cos</span><span class="token punctuation">(</span>uv<span class="token punctuation">.</span>x<span class="token operator">*</span><span class="token number">10.0</span><span class="token operator">*</span>tau<span class="token operator">*</span><span class="token number">0.15</span><span class="token operator">*</span><span class="token function">clamp</span><span class="token punctuation">(</span><span class="token function">floor</span><span class="token punctuation">(</span><span class="token number">5.0</span> <span class="token operator">&#43;</span> <span class="token number">10.0</span><span class="token operator">*</span><span class="token function">cos</span><span class="token punctuation">(</span>iTime<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0.0</span><span class="token punctuation">,</span> <span class="token number">10.0</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token function">abs</span><span class="token punctuation">(</span><span class="token number">1.0</span> <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">30.0</span> <span class="token operator">*</span> uv<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 horBeam <span class="token operator">&#61;</span> <span class="token function">vec3</span><span class="token punctuation">(</span>beamWidth<span class="token punctuation">)</span><span class="token punctuation">;</span>
fragColor <span class="token operator">&#61;</span> <span class="token function">vec4</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">(</span> horBeam<span class="token punctuation">)</span> <span class="token operator">*</span> horColour<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1.0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>a、首先是fragCoord&#xff0c;前面介绍过&#xff0c;fragCoord表示当前处理的像素坐标&#xff0c;是一个vec2类型&#xff0c;fragCoord.x范围为(0,画布宽度),fragCoord.y范围为(0,画布高度)。<br /> b、其次是iResolution&#xff0c;iResolution代表的是当前画布的宽高&#xff0c;即绘图区域的尺寸&#xff0c;所以fragCoord.x范围就是(0,iResolution.x),fragCoord.y范围就是(0,iResolution.y)。<br /> c、然后我们还在代码中看到有个iTime&#xff0c;该参数代表当前运行的时间&#xff0c;一般用来实现动画&#xff0c;因为您会发现大多数shader的效果都是动态的。<br /> d、最后是输出结果fragColor,代表最后计算的颜色输出值&#xff0c;在Cesium中为out_FragColor。</p>
<p>接下来介绍在Cesium如何获取对应的参数&#xff1a;</p>
<p>a、fragCoord在Cesium有个gl_FragCoord与之对应&#xff0c;这是一个WebGL内置的变量。<br /> b、iResolution在Cesium有个czm_viewport与之对应&#xff0c;不过使用时采用zw分量即 czm_viewport.zw<br /> c、iTime在Cesium中没有对应的变量&#xff0c;我们可以通过变量的方式传递一个参数&#xff0c;然后在渲染时不断修改该值&#xff0c;不过这种方式略显麻烦&#xff0c;在Cesium中我们可以用float iTime&#61;czm_frameNumber/100.来模拟&#xff0c;czm_frameNumber代表当前帧&#xff0c;是一个自增长的数值&#xff0c;所以可以用来模拟时间不断地增长。</p>
<p>接下来我们实操一下&#xff0c;在Cesium中实现该shader的效果&#xff1a;</p>
<p>1、首先我们创建一个Primitive并添加到sene中</p>
<pre><code class="prism language-java" style="height: 25vh;">let xMin <span class="token operator">&#61;</span> <span class="token number">115.894604</span><span class="token punctuation">,</span> yMin <span class="token operator">&#61;</span> <span class="token number">39.516896</span><span class="token punctuation">,</span> xMax <span class="token operator">&#61;</span> <span class="token number">117.431959</span><span class="token punctuation">,</span> yMax <span class="token operator">&#61;</span> <span class="token number">40.630521</span><span class="token punctuation">;</span>
let rect <span class="token operator">&#61;</span> <span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>Rectangle</span><span class="token punctuation">(</span><span class="token class-name">Cesium<span class="token punctuation">.</span>Math</span><span class="token punctuation">.</span><span class="token function">toRadians</span><span class="token punctuation">(</span>xMin<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>Math</span><span class="token punctuation">.</span><span class="token function">toRadians</span><span class="token punctuation">(</span>yMin<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>Math</span><span class="token punctuation">.</span><span class="token function">toRadians</span><span class="token punctuation">(</span>xMax<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>Math</span><span class="token punctuation">.</span><span class="token function">toRadians</span><span class="token punctuation">(</span>yMax<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> rectangle <span class="token operator">&#61;</span> <span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>RectangleGeometry</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
rectangle<span class="token operator">:</span> rect<span class="token punctuation">,</span>
height<span class="token operator">:</span> <span class="token number">10000.0</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> geometry <span class="token operator">&#61;</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>RectangleGeometry</span><span class="token punctuation">.</span><span class="token function">createGeometry</span><span class="token punctuation">(</span>rectangle<span class="token punctuation">)</span><span class="token punctuation">;</span>
viewer<span class="token punctuation">.</span>scene<span class="token punctuation">.</span>primitives<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>Primitive</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
geometryInstances<span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>GeometryInstance</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
geometry<span class="token operator">:</span> geometry
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
<p>2、此时会发现什么也看不见&#xff0c;这是因为没有设置外观&#xff0c;我们创建一个默认的外观</p>
<pre><code class="prism language-java" style="height: 25vh;">let appearance <span class="token operator">&#61;</span> <span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>MaterialAppearance</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
material<span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>Material</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
fabric<span class="token operator">:</span> <span class="token punctuation">{<!-- --></span>
type<span class="token operator">:</span> <span class="token string">&#34;Color&#34;</span><span class="token punctuation">,</span>
uniforms<span class="token operator">:</span> <span class="token punctuation">{<!-- --></span>
color<span class="token operator">:</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>Color</span><span class="token punctuation">.</span>RED
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
primitive<span class="token punctuation">.</span>appearance <span class="token operator">&#61;</span> appearance<span class="token punctuation">;</span>
</code></pre>
<p><img src="https://img-blog.csdnimg.cn/img_convert/aa4fd912f61efc677780ff1378cd3d11.png#pic_center" alt="在这里插入图片描述" /></p>
<p>3、接下来我们为外观添加片元着色器&#xff0c;并将shadertoy上的shader赋值给外观的片元着色器属性。</p>
<p>shadertoy上glsl代码&#xff1a;</p>
<pre><code class="prism language-java" style="height: 25vh;"> fragmentShaderSource<span class="token operator">:</span> &#96;
<span class="token keyword">void</span> <span class="token function">mainImage</span><span class="token punctuation">(</span> out vec4 fragColor<span class="token punctuation">,</span> in vec2 fragCoord <span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
vec2 p <span class="token operator">&#61;</span> <span class="token punctuation">(</span><span class="token number">2.0</span><span class="token operator">*</span>fragCoord<span class="token punctuation">.</span>xy<span class="token operator">-</span>iResolution<span class="token punctuation">.</span>xy<span class="token punctuation">)</span><span class="token operator">/</span>iResolution<span class="token punctuation">.</span>y<span class="token punctuation">;</span>
<span class="token keyword">float</span> tau <span class="token operator">&#61;</span> <span class="token number">3.1415926535</span><span class="token operator">*</span><span class="token number">2.0</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> a <span class="token operator">&#61;</span> <span class="token function">atan</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span>x<span class="token punctuation">,</span>p<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> r <span class="token operator">&#61;</span> <span class="token function">length</span><span class="token punctuation">(</span>p<span class="token punctuation">)</span><span class="token operator">*</span><span class="token number">0.75</span><span class="token punctuation">;</span>
vec2 uv <span class="token operator">&#61;</span> <span class="token function">vec2</span><span class="token punctuation">(</span>a<span class="token operator">/</span>tau<span class="token punctuation">,</span>r<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//get the color</span>
<span class="token keyword">float</span> xCol <span class="token operator">&#61;</span> <span class="token punctuation">(</span>uv<span class="token punctuation">.</span>x <span class="token operator">-</span> <span class="token punctuation">(</span>iTime <span class="token operator">/</span> <span class="token number">3.0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">3.0</span><span class="token punctuation">;</span>
xCol <span class="token operator">&#61;</span> <span class="token function">mod</span><span class="token punctuation">(</span>xCol<span class="token punctuation">,</span> <span class="token number">3.0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 horColour <span class="token operator">&#61;</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">0.25</span><span class="token punctuation">,</span> <span class="token number">0.25</span><span class="token punctuation">,</span> <span class="token number">0.25</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>xCol <span class="token operator">&lt;</span> <span class="token number">1.0</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
horColour<span class="token punctuation">.</span>r <span class="token operator">&#43;&#61;</span> <span class="token number">1.0</span> <span class="token operator">-</span> xCol<span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>g <span class="token operator">&#43;&#61;</span> xCol<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>xCol <span class="token operator">&lt;</span> <span class="token number">2.0</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
xCol <span class="token operator">-&#61;</span> <span class="token number">1.0</span><span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>g <span class="token operator">&#43;&#61;</span> <span class="token number">1.0</span> <span class="token operator">-</span> xCol<span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>b <span class="token operator">&#43;&#61;</span> xCol<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">else</span> <span class="token punctuation">{<!-- --></span>
xCol <span class="token operator">-&#61;</span> <span class="token number">2.0</span><span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>b <span class="token operator">&#43;&#61;</span> <span class="token number">1.0</span> <span class="token operator">-</span> xCol<span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>r <span class="token operator">&#43;&#61;</span> xCol<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// draw color beam</span>
uv <span class="token operator">&#61;</span> <span class="token punctuation">(</span><span class="token number">2.0</span> <span class="token operator">*</span> uv<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">1.0</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> beamWidth <span class="token operator">&#61;</span> <span class="token punctuation">(</span><span class="token number">0.7</span><span class="token operator">&#43;</span><span class="token number">0.5</span><span class="token operator">*</span><span class="token function">cos</span><span class="token punctuation">(</span>uv<span class="token punctuation">.</span>x<span class="token operator">*</span><span class="token number">10.0</span><span class="token operator">*</span>tau<span class="token operator">*</span><span class="token number">0.15</span><span class="token operator">*</span><span class="token function">clamp</span><span class="token punctuation">(</span><span class="token function">floor</span><span class="token punctuation">(</span><span class="token number">5.0</span> <span class="token operator">&#43;</span> <span class="token number">10.0</span><span class="token operator">*</span><span class="token function">cos</span><span class="token punctuation">(</span>iTime<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0.0</span><span class="token punctuation">,</span> <span class="token number">10.0</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token function">abs</span><span class="token punctuation">(</span><span class="token number">1.0</span> <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">30.0</span> <span class="token operator">*</span> uv<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 horBeam <span class="token operator">&#61;</span> <span class="token function">vec3</span><span class="token punctuation">(</span>beamWidth<span class="token punctuation">)</span><span class="token punctuation">;</span>
fragColor <span class="token operator">&#61;</span> <span class="token function">vec4</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">(</span> horBeam<span class="token punctuation">)</span> <span class="token operator">*</span> horColour<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1.0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
&#96;
</code></pre>
<p>操作步骤&#xff1a;<br /> a、首先我们需要修改着色器入口函数&#xff0c;即将mainImage修改为main&#xff0c;因为Appearance片元着色器的入口函数是main。<br /> b、然后将输出结果的fragColor修改为out_FragColor。<br /> c、最后我们按照上面说的替换掉fragCoord&#xff0c;fragCoord、iTime</p>
<p>我们需要的代码&#xff1a;</p>
<pre><code class="prism language-java" style="height: 25vh;">fragmentShaderSource<span class="token operator">:</span> &#96;
<span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token keyword">float</span> iTime<span class="token operator">&#61;</span>czm_frameNumber<span class="token operator">/</span><span class="token number">100.</span><span class="token punctuation">;</span>
vec2 p <span class="token operator">&#61;</span> <span class="token punctuation">(</span><span class="token number">2.0</span> <span class="token operator">*</span> gl_FragCoord<span class="token punctuation">.</span>xy<span class="token operator">-</span>czm_viewport<span class="token punctuation">.</span>zw<span class="token punctuation">)</span><span class="token operator">/</span>czm_viewport<span class="token punctuation">.</span>w<span class="token punctuation">;</span>
<span class="token keyword">float</span> tau <span class="token operator">&#61;</span> <span class="token number">3.1415926535</span><span class="token operator">*</span><span class="token number">2.0</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> a <span class="token operator">&#61;</span> <span class="token function">atan</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span>x<span class="token punctuation">,</span>p<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> r <span class="token operator">&#61;</span> <span class="token function">length</span><span class="token punctuation">(</span>p<span class="token punctuation">)</span><span class="token operator">*</span><span class="token number">0.75</span><span class="token punctuation">;</span>
vec2 uv <span class="token operator">&#61;</span> <span class="token function">vec2</span><span class="token punctuation">(</span>a<span class="token operator">/</span>tau<span class="token punctuation">,</span>r<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//get the color</span>
<span class="token keyword">float</span> xCol <span class="token operator">&#61;</span> <span class="token punctuation">(</span>uv<span class="token punctuation">.</span>x <span class="token operator">-</span> <span class="token punctuation">(</span>iTime <span class="token operator">/</span> <span class="token number">3.0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">3.0</span><span class="token punctuation">;</span>
xCol <span class="token operator">&#61;</span> <span class="token function">mod</span><span class="token punctuation">(</span>xCol<span class="token punctuation">,</span> <span class="token number">3.0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 horColour <span class="token operator">&#61;</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">0.25</span><span class="token punctuation">,</span> <span class="token number">0.25</span><span class="token punctuation">,</span> <span class="token number">0.25</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>xCol <span class="token operator">&lt;</span> <span class="token number">1.0</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
horColour<span class="token punctuation">.</span>r <span class="token operator">&#43;&#61;</span> <span class="token number">1.0</span> <span class="token operator">-</span> xCol<span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>g <span class="token operator">&#43;&#61;</span> xCol<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>xCol <span class="token operator">&lt;</span> <span class="token number">2.0</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
xCol <span class="token operator">-&#61;</span> <span class="token number">1.0</span><span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>g <span class="token operator">&#43;&#61;</span> <span class="token number">1.0</span> <span class="token operator">-</span> xCol<span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>b <span class="token operator">&#43;&#61;</span> xCol<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">else</span> <span class="token punctuation">{<!-- --></span>
xCol <span class="token operator">-&#61;</span> <span class="token number">2.0</span><span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>b <span class="token operator">&#43;&#61;</span> <span class="token number">1.0</span> <span class="token operator">-</span> xCol<span class="token punctuation">;</span>
horColour<span class="token punctuation">.</span>r <span class="token operator">&#43;&#61;</span> xCol<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// draw color beam</span>
uv <span class="token operator">&#61;</span> <span class="token punctuation">(</span><span class="token number">2.0</span> <span class="token operator">*</span> uv<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">1.0</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> beamWidth <span class="token operator">&#61;</span> <span class="token punctuation">(</span><span class="token number">0.7</span><span class="token operator">&#43;</span><span class="token number">0.5</span><span class="token operator">*</span><span class="token function">cos</span><span class="token punctuation">(</span>uv<span class="token punctuation">.</span>x<span class="token operator">*</span><span class="token number">10.0</span><span class="token operator">*</span>tau<span class="token operator">*</span><span class="token number">0.15</span><span class="token operator">*</span><span class="token function">clamp</span><span class="token punctuation">(</span><span class="token function">floor</span><span class="token punctuation">(</span><span class="token number">5.0</span> <span class="token operator">&#43;</span> <span class="token number">10.0</span><span class="token operator">*</span><span class="token function">cos</span><span class="token punctuation">(</span>iTime<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0.0</span><span class="token punctuation">,</span> <span class="token number">10.0</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token function">abs</span><span class="token punctuation">(</span><span class="token number">1.0</span> <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">30.0</span> <span class="token operator">*</span> uv<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 horBeam <span class="token operator">&#61;</span> <span class="token function">vec3</span><span class="token punctuation">(</span>beamWidth<span class="token punctuation">)</span><span class="token punctuation">;</span>
out_FragColor <span class="token operator">&#61;</span> <span class="token function">vec4</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">(</span> horBeam<span class="token punctuation">)</span> <span class="token operator">*</span> horColour<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1.0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
&#96;
</code></pre>
<p><img src="https://img-blog.csdnimg.cn/img_convert/b71065d007c4923af46f2406af5cca5b.gif#pic_center" alt="在这里插入图片描述" /></p>
<p>但是移动地球我们会发现绘制的结果始终是在屏幕中心&#xff0c;这其实是一个正确的结果&#xff0c;因为这个示例在shadertoy上也是始终绘制在屏幕中心。现在我们需要将Primitive的几何体作为绘制的画布&#xff0c;上面我们是使用gl_FragCoord坐标来获取当前应该处理的像素&#xff0c;我们现在需要改变为Appearance的纹理坐标&#xff0c;通过Appearence的纹理坐标&#xff0c;计算当前Appearence上需要处理的像素。</p>
<pre><code class="prism language-java" style="height: 25vh;">vec2 p <span class="token operator">&#61;</span> <span class="token punctuation">(</span><span class="token number">2.0</span> <span class="token operator">*</span> gl_FragCoord<span class="token punctuation">.</span>xy<span class="token operator">-</span>czm_viewport<span class="token punctuation">.</span>zw<span class="token punctuation">)</span><span class="token operator">/</span>czm_viewport<span class="token punctuation">.</span>w<span class="token punctuation">;</span>
</code></pre>
<p>该行代码的意思是将绘图区的宽高转换到[-1,1]的一个区间中。而在Appearance的片元着色器中&#xff0c;相对于该Primitive对应的Geometry而言&#xff0c;绘图区的宽高已经被限制在了[0,1]的区间了&#xff0c;这可以由片元着色器的st推断&#xff0c;因为片元着色器的st一般就是[0,1]。现在我们改造一下代码&#xff0c;将绘图区限定到Appearance的纹理区间中</p>
<pre><code class="prism language-java" style="height: 25vh;"> vec2 p <span class="token operator">&#61;</span> <span class="token number">2.0</span> <span class="token operator">*</span> v_st <span class="token operator">-</span> <span class="token number">1.</span><span class="token punctuation">;</span><span class="token comment">//(2.0*fragCoord.xy-iResolution.xy)/iResolution.y;</span>
</code></pre>
<p>因为v_st区间是[0,1]&#xff0c;所以我们的变换一下到[-1,1]&#xff0c;运行结果如下<br /> <img src="https://img-blog.csdnimg.cn/img_convert/c7673cdb75556dab2dbdff9497328541.gif#pic_center" alt="在这里插入图片描述" /></p>
<p>到这里我们已经成功将shadertoy上这个示例的shader移植到Cesium上的Primitve中</p>
<p><strong>四、着色器使用技巧</strong></p>
<p>上面示例的shader成功移植到Cesium中的Primitive上。分享2个在使用shadertoy上的shader时的技巧&#xff1a;</p>
<p>1、在Cesium中如何选择对应的载体作为画布<br /> 因为shadertoy上的shader类型canvas的绘制原理&#xff0c;是将canvas作为一个画布&#xff0c;在Cesium中我们可以选择Entity或Primtive来作为载体。又因为要方便操作片元着色器&#xff0c;所以我们选择了Primitive&#xff0c;但是Primitive中又有很多Geometry类型&#xff0c;那具体使用哪种Geometry呢&#xff1f;根据经验&#xff0c;最好选择像RectangleGeometry、PlaneGeomery这种比较规则的几何类型&#xff0c;因为shader绘图其实是根据纹理坐标来实现的&#xff0c;而这种规则的几何往往 它的纹理坐标也比较规则。</p>
<p>2、如何去除黑色背景<br /> 虽然我们已经成功将shader移植到Cesium中&#xff0c;但是黑色的背景着实有点丑&#xff0c;我们使用shader的初衷是为了好看、酷炫&#xff0c;这效果好像有点违背了我们的初衷。那我们该如何去除这个黑色的背景呢&#xff1f;我们可以分析一下这个黑色&#xff0c;其实黑色的值就是vec3(0,0,0)&#xff0c;rgb三个分量越接近于0&#xff0c;就越黑&#xff0c;当然&#xff0c;这也代表着r&#43;g&#43;b约接近0&#xff0c;所以我们可以这样去消除黑色背景。</p>
<pre><code class="prism language-java" style="height: 25vh;">out_FragColor <span class="token operator">&#61;</span> <span class="token function">vec4</span><span class="token punctuation">(</span>color<span class="token punctuation">,</span>color<span class="token punctuation">.</span>r<span class="token operator">&#43;</span>color<span class="token punctuation">.</span>g<span class="token operator">&#43;</span>color<span class="token punctuation">.</span>g<span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
<p><img src="https://img-blog.csdnimg.cn/img_convert/09702a92331f297b923498f195ad37f6.gif#pic_center" alt="在这里插入图片描述" /></p>
<p>这样就可以了。</p>
<p><strong>五、难度加深&#xff0c;带有输入纹理数据的着色器示例&#xff08;应用&#xff09;</strong></p>
<p>实现一个<a href="https://www.shadertoy.com/view/ldfyzl" rel="nofollow">shader</a>上带有输入纹理数据的例子<br /> <img src="https://img-blog.csdnimg.cn/img_convert/e9ff0716de4a7c4710989de8b24d3998.gif#pic_center" alt="在这里插入图片描述" /></p>
<p>按照 “在Cesium中如何使用” 一节的思路&#xff0c;我们先创建好Primitive、Appearance&#xff0c;然后将着色器代码拷贝进来并修改相关参数。</p>
<pre><code class="prism language-java" style="height: 25vh;">let xMin <span class="token operator">&#61;</span> <span class="token number">115.894604</span><span class="token punctuation">,</span> yMin <span class="token operator">&#61;</span> <span class="token number">39.516896</span><span class="token punctuation">,</span> xMax <span class="token operator">&#61;</span> <span class="token number">117.431959</span><span class="token punctuation">,</span> yMax <span class="token operator">&#61;</span> <span class="token number">40.630521</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> rectangle <span class="token operator">&#61;</span> <span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>RectangleGeometry</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
rectangle<span class="token operator">:</span> rect<span class="token punctuation">,</span>
height<span class="token operator">:</span> <span class="token number">10000.0</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> geometry <span class="token operator">&#61;</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>RectangleGeometry</span><span class="token punctuation">.</span><span class="token function">createGeometry</span><span class="token punctuation">(</span>rectangle<span class="token punctuation">)</span><span class="token punctuation">;</span>
viewer<span class="token punctuation">.</span>scene<span class="token punctuation">.</span>primitives<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>Primitive</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
geometryInstances<span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>GeometryInstance</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
geometry<span class="token operator">:</span> geometry
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
appearance<span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>MaterialAppearance</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
material<span class="token operator">:</span><span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>Material</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
fabric<span class="token operator">:</span> <span class="token punctuation">{<!-- --></span>
uniforms<span class="token operator">:</span> <span class="token punctuation">{<!-- --></span>
image<span class="token operator">:</span><span class="token string">&#34;./texture.png&#34;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">,</span>
fragmentShaderSource<span class="token operator">:</span> &#96;
in vec3 v_positionEC<span class="token punctuation">;</span>
in vec3 v_normalEC<span class="token punctuation">;</span>
in vec2 v_st<span class="token punctuation">;</span>
<span class="token comment">// Maximum number of cells a ripple can cross.</span>
#define MAX_RADIUS <span class="token number">2</span>
<span class="token comment">// Set to 1 to hash twice. Slower, but less patterns.</span>
#define DOUBLE_HASH <span class="token number">0</span>
<span class="token comment">// Hash functions shamefully stolen from:</span>
<span class="token comment">// https://www.shadertoy.com/view/4djSRW</span>
#define HASHSCALE1 <span class="token number">.1031</span>
#define <span class="token class-name">HASHSCALE3</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">.1031</span><span class="token punctuation">,</span> <span class="token number">.1030</span><span class="token punctuation">,</span> <span class="token number">.0973</span><span class="token punctuation">)</span>
<span class="token keyword">float</span> <span class="token function">hash12</span><span class="token punctuation">(</span>vec2 p<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
vec3 p3 <span class="token operator">&#61;</span> <span class="token function">fract</span><span class="token punctuation">(</span><span class="token function">vec3</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span>xyx<span class="token punctuation">)</span> <span class="token operator">*</span> HASHSCALE1<span class="token punctuation">)</span><span class="token punctuation">;</span>
p3 <span class="token operator">&#43;&#61;</span> <span class="token function">dot</span><span class="token punctuation">(</span>p3<span class="token punctuation">,</span> p3<span class="token punctuation">.</span>yzx <span class="token operator">&#43;</span> <span class="token number">19.19</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> <span class="token function">fract</span><span class="token punctuation">(</span><span class="token punctuation">(</span>p3<span class="token punctuation">.</span>x <span class="token operator">&#43;</span> p3<span class="token punctuation">.</span>y<span class="token punctuation">)</span> <span class="token operator">*</span> p3<span class="token punctuation">.</span>z<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
vec2 <span class="token function">hash22</span><span class="token punctuation">(</span>vec2 p<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
vec3 p3 <span class="token operator">&#61;</span> <span class="token function">fract</span><span class="token punctuation">(</span><span class="token function">vec3</span><span class="token punctuation">(</span>p<span class="token punctuation">.</span>xyx<span class="token punctuation">)</span> <span class="token operator">*</span> HASHSCALE3<span class="token punctuation">)</span><span class="token punctuation">;</span>
p3 <span class="token operator">&#43;&#61;</span> <span class="token function">dot</span><span class="token punctuation">(</span>p3<span class="token punctuation">,</span> p3<span class="token punctuation">.</span>yzx<span class="token operator">&#43;</span><span class="token number">19.19</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> <span class="token function">fract</span><span class="token punctuation">(</span><span class="token punctuation">(</span>p3<span class="token punctuation">.</span>xx<span class="token operator">&#43;</span>p3<span class="token punctuation">.</span>yz<span class="token punctuation">)</span><span class="token operator">*</span>p3<span class="token punctuation">.</span>zy<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span> <span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token comment">//float resolution &#61; 10. * exp2(-3.*iMouse.x/iResolution.x);</span>
<span class="token comment">// vec2 uv &#61; fragCoord.xy / iResolution.y * resolution;</span>
<span class="token keyword">float</span> resolution <span class="token operator">&#61;</span><span class="token number">20.</span><span class="token punctuation">;</span>
vec2 uv <span class="token operator">&#61;</span> v_st <span class="token operator">*</span> resolution<span class="token punctuation">;</span>
vec2 p0 <span class="token operator">&#61;</span> <span class="token function">floor</span><span class="token punctuation">(</span>uv<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> iTime<span class="token operator">&#61;</span>czm_frameNumber<span class="token operator">/</span><span class="token number">100.</span><span class="token punctuation">;</span>
vec2 circles <span class="token operator">&#61;</span> <span class="token function">vec2</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j <span class="token operator">&#61;</span> <span class="token operator">-</span>MAX_RADIUS<span class="token punctuation">;</span> j <span class="token operator">&lt;&#61;</span> MAX_RADIUS<span class="token punctuation">;</span> <span class="token operator">&#43;&#43;</span>j<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">&#61;</span> <span class="token operator">-</span>MAX_RADIUS<span class="token punctuation">;</span> i <span class="token operator">&lt;&#61;</span> MAX_RADIUS<span class="token punctuation">;</span> <span class="token operator">&#43;&#43;</span>i<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
vec2 pi <span class="token operator">&#61;</span> p0 <span class="token operator">&#43;</span> <span class="token function">vec2</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span> j<span class="token punctuation">)</span><span class="token punctuation">;</span>
#<span class="token keyword">if</span> DOUBLE_HASH
vec2 hsh <span class="token operator">&#61;</span> <span class="token function">hash22</span><span class="token punctuation">(</span>pi<span class="token punctuation">)</span><span class="token punctuation">;</span>
#<span class="token keyword">else</span>
vec2 hsh <span class="token operator">&#61;</span> pi<span class="token punctuation">;</span>
#endif
vec2 p <span class="token operator">&#61;</span> pi <span class="token operator">&#43;</span> <span class="token function">hash22</span><span class="token punctuation">(</span>hsh<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> t <span class="token operator">&#61;</span> <span class="token function">fract</span><span class="token punctuation">(</span><span class="token number">0.3</span><span class="token operator">*</span>iTime <span class="token operator">&#43;</span> <span class="token function">hash12</span><span class="token punctuation">(</span>hsh<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec2 v <span class="token operator">&#61;</span> p <span class="token operator">-</span> uv<span class="token punctuation">;</span>
<span class="token keyword">float</span> d <span class="token operator">&#61;</span> <span class="token function">length</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token punctuation">(</span><span class="token keyword">float</span><span class="token punctuation">(</span>MAX_RADIUS<span class="token punctuation">)</span> <span class="token operator">&#43;</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token operator">*</span>t<span class="token punctuation">;</span>
<span class="token keyword">float</span> h <span class="token operator">&#61;</span> <span class="token number">1e-3</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> d1 <span class="token operator">&#61;</span> d <span class="token operator">-</span> h<span class="token punctuation">;</span>
<span class="token keyword">float</span> d2 <span class="token operator">&#61;</span> d <span class="token operator">&#43;</span> h<span class="token punctuation">;</span>
<span class="token keyword">float</span> p1 <span class="token operator">&#61;</span> <span class="token function">sin</span><span class="token punctuation">(</span><span class="token number">31.</span><span class="token operator">*</span>d1<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token function">smoothstep</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">0.6</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">0.3</span><span class="token punctuation">,</span> d1<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token function">smoothstep</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">0.3</span><span class="token punctuation">,</span> d1<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> p2 <span class="token operator">&#61;</span> <span class="token function">sin</span><span class="token punctuation">(</span><span class="token number">31.</span><span class="token operator">*</span>d2<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token function">smoothstep</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">0.6</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">0.3</span><span class="token punctuation">,</span> d2<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token function">smoothstep</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">0.3</span><span class="token punctuation">,</span> d2<span class="token punctuation">)</span><span class="token punctuation">;</span>
circles <span class="token operator">&#43;&#61;</span> <span class="token number">0.5</span> <span class="token operator">*</span> <span class="token function">normalize</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>p2 <span class="token operator">-</span> p1<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">2.</span> <span class="token operator">*</span> h<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1.</span> <span class="token operator">-</span> t<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1.</span> <span class="token operator">-</span> t<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
circles <span class="token operator">/&#61;</span> <span class="token keyword">float</span><span class="token punctuation">(</span><span class="token punctuation">(</span>MAX_RADIUS<span class="token operator">*</span><span class="token number">2</span><span class="token operator">&#43;</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">*</span><span class="token punctuation">(</span>MAX_RADIUS<span class="token operator">*</span><span class="token number">2</span><span class="token operator">&#43;</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> intensity <span class="token operator">&#61;</span> <span class="token function">mix</span><span class="token punctuation">(</span><span class="token number">0.01</span><span class="token punctuation">,</span> <span class="token number">0.15</span><span class="token punctuation">,</span> <span class="token function">smoothstep</span><span class="token punctuation">(</span><span class="token number">0.1</span><span class="token punctuation">,</span> <span class="token number">0.6</span><span class="token punctuation">,</span> <span class="token function">abs</span><span class="token punctuation">(</span><span class="token function">fract</span><span class="token punctuation">(</span><span class="token number">0.05</span><span class="token operator">*</span>iTime <span class="token operator">&#43;</span> <span class="token number">0.5</span><span class="token punctuation">)</span><span class="token operator">*</span><span class="token number">2.</span><span class="token operator">-</span><span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 n <span class="token operator">&#61;</span> <span class="token function">vec3</span><span class="token punctuation">(</span>circles<span class="token punctuation">,</span> <span class="token function">sqrt</span><span class="token punctuation">(</span><span class="token number">1.</span> <span class="token operator">-</span> <span class="token function">dot</span><span class="token punctuation">(</span>circles<span class="token punctuation">,</span> circles<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 color <span class="token operator">&#61;</span> <span class="token function">texture</span><span class="token punctuation">(</span>image_0<span class="token punctuation">,</span> uv<span class="token operator">/</span>resolution <span class="token operator">-</span> intensity<span class="token operator">*</span>n<span class="token punctuation">.</span>xy<span class="token punctuation">)</span><span class="token punctuation">.</span>rgb <span class="token operator">&#43;</span> <span class="token number">5.</span><span class="token operator">*</span><span class="token function">pow</span><span class="token punctuation">(</span><span class="token function">clamp</span><span class="token punctuation">(</span><span class="token function">dot</span><span class="token punctuation">(</span>n<span class="token punctuation">,</span> <span class="token function">normalize</span><span class="token punctuation">(</span><span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.7</span><span class="token punctuation">,</span> <span class="token number">0.5</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">6.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
out_FragColor <span class="token operator">&#61;</span> <span class="token function">vec4</span><span class="token punctuation">(</span>color<span class="token punctuation">,</span> <span class="token number">1.0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
&#96;
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
<p>分析代码&#xff1a;</p>
<pre><code class="prism language-java" style="height: 25vh;"><span class="token keyword">float</span> resolution <span class="token operator">&#61;</span> <span class="token number">10.</span> <span class="token operator">*</span> <span class="token function">exp2</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">3.</span><span class="token operator">*</span>iMouse<span class="token punctuation">.</span>x<span class="token operator">/</span>iResolution<span class="token punctuation">.</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>
vec2 uv <span class="token operator">&#61;</span> fragCoord<span class="token punctuation">.</span>xy <span class="token operator">/</span> iResolution<span class="token punctuation">.</span>y <span class="token operator">*</span> resolution<span class="token punctuation">;</span>
</code></pre>
<p>意思是将uv转换到[0,x]的区间&#xff0c;在Cesium中应该这样写&#xff0c;我们先固定一个值</p>
<pre><code class="prism language-java" style="height: 25vh;"><span class="token keyword">float</span> resolution <span class="token operator">&#61;</span><span class="token number">20.</span><span class="token punctuation">;</span>
vec2 uv <span class="token operator">&#61;</span> v_st <span class="token operator">*</span> resolution<span class="token punctuation">;</span>
</code></pre>
<p>本节的重点是</p>
<pre><code class="prism language-java" style="height: 25vh;">vec3 color <span class="token operator">&#61;</span> <span class="token function">texture</span><span class="token punctuation">(</span>iChannel0<span class="token punctuation">,</span> uv<span class="token operator">/</span>resolution <span class="token operator">-</span> intensity<span class="token operator">*</span>n<span class="token punctuation">.</span>xy<span class="token punctuation">)</span><span class="token punctuation">.</span>rgb <span class="token operator">&#43;</span> <span class="token number">5.</span><span class="token operator">*</span><span class="token function">pow</span><span class="token punctuation">(</span><span class="token function">clamp</span><span class="token punctuation">(</span><span class="token function">dot</span><span class="token punctuation">(</span>n<span class="token punctuation">,</span><span class="token function">normalize</span><span class="token punctuation">(</span><span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.7</span><span class="token punctuation">,</span> <span class="token number">0.5</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">6.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">texture</span><span class="token punctuation">(</span>iChannel0<span class="token punctuation">,</span> uv<span class="token operator">/</span>resolution <span class="token operator">-</span> intensity<span class="token operator">*</span>n<span class="token punctuation">.</span>xy<span class="token punctuation">)</span><span class="token punctuation">.</span>rgb
</code></pre>
<p>从纹理中采样颜色值&#xff0c;这个iChannel0是sampler2D&#xff0c;在Cesium对应Cesium.Texture&#xff0c;不过我们可以直接传一张图片&#xff0c;Cesium会自动为我们封装成Cesium.Texture。将图片传递到着色器&#xff0c;这里我们采用Materail的属性uniforms&#xff0c;需要注意的是如果您在Appearance的片元着色器中使用Material中的uniforms参数值时&#xff0c;你必须在参数名的后面加上一个序号&#xff0c;比如你的第一个参数为在Material的uniforms中为image&#xff0c;那在Appearance的片元着色器中必须使用image_0&#xff0c;如下&#xff1a;</p>
<pre><code class="prism language-java" style="height: 25vh;"><span class="token function">texture</span><span class="token punctuation">(</span>image_0<span class="token punctuation">,</span> uv<span class="token operator">/</span>resolution <span class="token operator">-</span> intensity<span class="token operator">*</span>n<span class="token punctuation">.</span>xy<span class="token punctuation">)</span><span class="token punctuation">.</span>rgb
</code></pre>
<p><img src="https://img-blog.csdnimg.cn/img_convert/63bdf501ba818cb309751c33730c63ac.gif#pic_center" alt="在这里插入图片描述" /></p>
<p><strong>六、Perlin-Worley噪声实现云图</strong></p>
<p>shadertoy示例地址&#xff1a;https://www.shadertoy.com/view/3dVXDc</p>
<p><img src="https://img-blog.csdnimg.cn/img_convert/b75429109a7c276754ffb523df9e9d48.png#pic_center" alt="在这里插入图片描述" /></p>
<p>该示例使用了Perlin&#43;Worley&#xff08;柏林&#43;沃利&#xff09;噪声来实现云的效果&#xff0c;并且是先将结果绘制到一张Texture中&#xff0c;然后在主函数中根据纹理坐标读取纹理中的值。<br /> 1、首先是噪声函数&#xff0c;定义在Common中<br /> <img src="https://img-blog.csdnimg.cn/img_convert/211bf10bbb9465b33d1ec278ab9184e3.png#pic_center" alt="在这里插入图片描述" /></p>
<p>2、然后是绘制到Texture中&#xff0c;过程在BufferA中<br /> <img src="https://img-blog.csdnimg.cn/img_convert/6bab4d5963817d72a2e0418a5841e815.png#pic_center" alt="在这里插入图片描述" /></p>
<p>3、最后在主函数中调用<br /> <img src="https://img-blog.csdnimg.cn/img_convert/2b47675426e7e025aa72c770126b795d.png#pic_center" alt="在这里插入图片描述" /></p>
<p>4、主函数中为了显示了各个噪声的结果&#xff0c;将画布拆分为了5份&#xff0c;我们可以注释掉一些不需要的结果显示&#xff0c;比如修改代码如下&#xff1a;</p>
<pre><code class="prism language-java" style="height: 25vh;"><span class="token keyword">void</span> <span class="token function">mainImage</span><span class="token punctuation">(</span> out vec4 fragColor<span class="token punctuation">,</span> in vec2 fragCoord <span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
vec2 st <span class="token operator">&#61;</span> fragCoord <span class="token operator">/</span> iResolution<span class="token punctuation">.</span>xy<span class="token punctuation">;</span>
vec2 uv <span class="token operator">&#61;</span> fragCoord <span class="token operator">/</span> iResolution<span class="token punctuation">.</span>y<span class="token punctuation">;</span>
st<span class="token punctuation">.</span>x <span class="token operator">*&#61;</span> <span class="token number">5.</span><span class="token punctuation">;</span> <span class="token comment">// 5 columns for different noises</span>
uv <span class="token operator">-&#61;</span> <span class="token number">.02</span> <span class="token operator">*</span> iTime<span class="token punctuation">;</span>
vec3 col <span class="token operator">&#61;</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> perlinWorley <span class="token operator">&#61;</span> <span class="token function">textureLod</span><span class="token punctuation">(</span>iChannel0<span class="token punctuation">,</span> uv <span class="token operator">*</span> <span class="token number">.5</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">.</span>x<span class="token punctuation">;</span>
<span class="token comment">// worley fbms with different frequencies</span>
vec3 worley <span class="token operator">&#61;</span> <span class="token function">textureLod</span><span class="token punctuation">(</span>iChannel0<span class="token punctuation">,</span> uv<span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">.</span>yzw<span class="token punctuation">;</span>
<span class="token keyword">float</span> wfbm <span class="token operator">&#61;</span> worley<span class="token punctuation">.</span>x <span class="token operator">*</span> <span class="token number">.625</span> <span class="token operator">&#43;</span>
worley<span class="token punctuation">.</span>y <span class="token operator">*</span> <span class="token number">.125</span> <span class="token operator">&#43;</span>
worley<span class="token punctuation">.</span>z <span class="token operator">*</span> <span class="token number">.25</span><span class="token punctuation">;</span>
<span class="token comment">// cloud shape modeled after the GPU Pro 7 chapter</span>
<span class="token keyword">float</span> cloud <span class="token operator">&#61;</span> <span class="token function">remap</span><span class="token punctuation">(</span>perlinWorley<span class="token punctuation">,</span> wfbm <span class="token operator">-</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
cloud <span class="token operator">&#61;</span> <span class="token function">remap</span><span class="token punctuation">(</span>cloud<span class="token punctuation">,</span> <span class="token number">.85</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// fake cloud coverage</span>
<span class="token comment">// if (st.x &lt; 1.)</span>
<span class="token comment">// col &#43;&#61; perlinWorley;</span>
<span class="token comment">// else if(st.x &lt; 2.)</span>
<span class="token comment">// col &#43;&#61; worley.x;</span>
<span class="token comment">// else if(st.x &lt; 3.)</span>
<span class="token comment">// col &#43;&#61; worley.y;</span>
<span class="token comment">// else if(st.x &lt; 4.)</span>
<span class="token comment">// col &#43;&#61; worley.z;</span>
<span class="token comment">// else if(st.x &lt; 5.)</span>
col <span class="token operator">&#43;&#61;</span> cloud<span class="token punctuation">;</span>
<span class="token comment">// column dividers</span>
<span class="token comment">// float div &#61; smoothstep(.01, 0., abs(st.x - 1.));</span>
<span class="token comment">// div &#43;&#61; smoothstep(.01, 0., abs(st.x - 2.));</span>
<span class="token comment">// div &#43;&#61; smoothstep(.01, 0., abs(st.x - 3.));</span>
<span class="token comment">// div &#43;&#61; smoothstep(.01, 0., abs(st.x - 4.));</span>
<span class="token comment">// col &#61; mix(col, vec3(0., 0., .866), div);</span>
fragColor <span class="token operator">&#61;</span> <span class="token function">vec4</span><span class="token punctuation">(</span>col<span class="token punctuation">,</span><span class="token number">1.0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
因为我们不需要绘制到<span class="token class-name">Texture</span>的步骤&#xff0c;所以需要合并<span class="token class-name">BufferA</span>和主函数的代码
uv <span class="token operator">-&#61;</span> <span class="token number">.02</span> <span class="token operator">*</span> iTime<span class="token punctuation">;</span>
vec2 m <span class="token operator">&#61;</span> <span class="token function">vec2</span><span class="token punctuation">(</span><span class="token number">0.5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec4 col <span class="token operator">&#61;</span> <span class="token function">vec4</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> slices <span class="token operator">&#61;</span> <span class="token number">128.</span><span class="token punctuation">;</span> <span class="token comment">// number of layers of the 3d texture</span>
<span class="token keyword">float</span> freq <span class="token operator">&#61;</span> <span class="token number">4.</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> pfbm<span class="token operator">&#61;</span> <span class="token function">mix</span><span class="token punctuation">(</span><span class="token number">1.</span><span class="token punctuation">,</span> <span class="token function">perlinfbm</span><span class="token punctuation">(</span><span class="token function">vec3</span><span class="token punctuation">(</span>uv<span class="token punctuation">,</span> <span class="token function">floor</span><span class="token punctuation">(</span>m<span class="token punctuation">.</span>y<span class="token operator">*</span>slices<span class="token punctuation">)</span><span class="token operator">/</span>slices<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">4.</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">.5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
pfbm <span class="token operator">&#61;</span> <span class="token function">abs</span><span class="token punctuation">(</span>pfbm <span class="token operator">*</span> <span class="token number">2.</span> <span class="token operator">-</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// billowy perlin noise</span>
col<span class="token punctuation">.</span>g <span class="token operator">&#43;&#61;</span> <span class="token function">worleyFbm</span><span class="token punctuation">(</span><span class="token function">vec3</span><span class="token punctuation">(</span>uv<span class="token punctuation">,</span> <span class="token function">floor</span><span class="token punctuation">(</span>m<span class="token punctuation">.</span>y<span class="token operator">*</span>slices<span class="token punctuation">)</span><span class="token operator">/</span>slices<span class="token punctuation">)</span><span class="token punctuation">,</span> freq<span class="token punctuation">)</span><span class="token punctuation">;</span>
col<span class="token punctuation">.</span>b <span class="token operator">&#43;&#61;</span> <span class="token function">worleyFbm</span><span class="token punctuation">(</span><span class="token function">vec3</span><span class="token punctuation">(</span>uv<span class="token punctuation">,</span> <span class="token function">floor</span><span class="token punctuation">(</span>m<span class="token punctuation">.</span>y<span class="token operator">*</span>slices<span class="token punctuation">)</span><span class="token operator">/</span>slices<span class="token punctuation">)</span><span class="token punctuation">,</span> freq<span class="token operator">*</span><span class="token number">2.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
col<span class="token punctuation">.</span>a <span class="token operator">&#43;&#61;</span> <span class="token function">worleyFbm</span><span class="token punctuation">(</span><span class="token function">vec3</span><span class="token punctuation">(</span>uv<span class="token punctuation">,</span> <span class="token function">floor</span><span class="token punctuation">(</span>m<span class="token punctuation">.</span>y<span class="token operator">*</span>slices<span class="token punctuation">)</span><span class="token operator">/</span>slices<span class="token punctuation">)</span><span class="token punctuation">,</span> freq<span class="token operator">*</span><span class="token number">4.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
col<span class="token punctuation">.</span>r <span class="token operator">&#43;&#61;</span> <span class="token function">remap</span><span class="token punctuation">(</span>pfbm<span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> col<span class="token punctuation">.</span>g<span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// perlin-worley </span>
<span class="token keyword">float</span> perlinWorley <span class="token operator">&#61;</span> col<span class="token punctuation">.</span>r<span class="token punctuation">;</span>
<span class="token comment">// worley fbms with different frequencies</span>
vec3 worley <span class="token operator">&#61;</span> col<span class="token punctuation">.</span>yzw<span class="token punctuation">;</span>
<span class="token keyword">float</span> wfbm <span class="token operator">&#61;</span> worley<span class="token punctuation">.</span>x <span class="token operator">*</span> <span class="token number">.625</span> <span class="token operator">&#43;</span>
worley<span class="token punctuation">.</span>y <span class="token operator">*</span> <span class="token number">.125</span> <span class="token operator">&#43;</span>
worley<span class="token punctuation">.</span>z <span class="token operator">*</span> <span class="token number">.25</span><span class="token punctuation">;</span>
<span class="token comment">// cloud shape modeled after the GPU Pro 7 chapter</span>
<span class="token keyword">float</span> cloud <span class="token operator">&#61;</span> <span class="token function">remap</span><span class="token punctuation">(</span>perlinWorley<span class="token punctuation">,</span> wfbm <span class="token operator">-</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
cloud <span class="token operator">&#61;</span> <span class="token function">remap</span><span class="token punctuation">(</span>cloud<span class="token punctuation">,</span> <span class="token number">.65</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// fake cloud coverage</span>
vec3 col_ <span class="token operator">&#61;</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
col_ <span class="token operator">&#43;&#61;</span> cloud<span class="token punctuation">;</span>
</code></pre>
<p>5、在cesium中如何实现&#xff1a;我们先创建好Primitive、Appearance&#xff0c;然后将着色器代码拷贝进来并修改相关参数</p>
<pre><code class="prism language-java" style="height: 25vh;">let xMin <span class="token operator">&#61;</span> <span class="token number">115.894604</span><span class="token punctuation">,</span> yMin <span class="token operator">&#61;</span> <span class="token number">39.516896</span><span class="token punctuation">,</span> xMax <span class="token operator">&#61;</span> <span class="token number">117.431959</span><span class="token punctuation">,</span> yMax <span class="token operator">&#61;</span> <span class="token number">40.630521</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> rectangle <span class="token operator">&#61;</span> <span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>RectangleGeometry</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
rectangle<span class="token operator">:</span> rect<span class="token punctuation">,</span>
height<span class="token operator">:</span> <span class="token number">10000.0</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> geometry <span class="token operator">&#61;</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>RectangleGeometry</span><span class="token punctuation">.</span><span class="token function">createGeometry</span><span class="token punctuation">(</span>rectangle<span class="token punctuation">)</span><span class="token punctuation">;</span>
viewer<span class="token punctuation">.</span>scene<span class="token punctuation">.</span>primitives<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>Primitive</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
geometryInstances<span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>GeometryInstance</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
geometry<span class="token operator">:</span> geometry
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
appearance<span class="token operator">:</span> <span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>MaterialAppearance</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
material<span class="token operator">:</span><span class="token keyword">new</span> <span class="token class-name">Cesium<span class="token punctuation">.</span>Material</span><span class="token punctuation">(</span><span class="token punctuation">{<!-- --></span>
fabric<span class="token operator">:</span> <span class="token punctuation">{<!-- --></span>
uniforms<span class="token operator">:</span> <span class="token punctuation">{<!-- --></span>
image<span class="token operator">:</span><span class="token string">&#34;./texture.png&#34;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">,</span>
fragmentShaderSource<span class="token operator">:</span> &#96;
in vec3 v_positionEC<span class="token punctuation">;</span><span class="token comment">//顶点 相机&#xff08;眼睛&#xff09;坐标系 </span>
in vec3 v_normalEC<span class="token punctuation">;</span><span class="token comment">//顶点法线 相机&#xff08;眼睛&#xff09;坐标系 </span>
in vec2 v_st<span class="token punctuation">;</span><span class="token comment">//纹理坐标 uv</span>
<span class="token comment">/**
This tab contains all the necessary noise functions required to model a cloud shape.
*/</span>
<span class="token comment">// Hash by David_Hoskins</span>
#define UI0 <span class="token number">1597334673</span>U
#define UI1 <span class="token number">3812015801</span>U
#define <span class="token class-name">UI2</span> <span class="token function">uvec2</span><span class="token punctuation">(</span>UI0<span class="token punctuation">,</span> UI1<span class="token punctuation">)</span>
#define <span class="token class-name">UI3</span> <span class="token function">uvec3</span><span class="token punctuation">(</span>UI0<span class="token punctuation">,</span> UI1<span class="token punctuation">,</span> <span class="token number">2798796415</span>U<span class="token punctuation">)</span>
#define UIF <span class="token punctuation">(</span><span class="token number">1.0</span> <span class="token operator">/</span> <span class="token keyword">float</span><span class="token punctuation">(</span><span class="token number">0</span>xffffffffU<span class="token punctuation">)</span><span class="token punctuation">)</span>
vec3 <span class="token function">hash33</span><span class="token punctuation">(</span>vec3 p<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
uvec3 q <span class="token operator">&#61;</span> <span class="token function">uvec3</span><span class="token punctuation">(</span><span class="token function">ivec3</span><span class="token punctuation">(</span>p<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> UI3<span class="token punctuation">;</span>
q <span class="token operator">&#61;</span> <span class="token punctuation">(</span>q<span class="token punctuation">.</span>x <span class="token operator">^</span> q<span class="token punctuation">.</span>y <span class="token operator">^</span> q<span class="token punctuation">.</span>z<span class="token punctuation">)</span><span class="token operator">*</span>UI3<span class="token punctuation">;</span>
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1.</span> <span class="token operator">&#43;</span> <span class="token number">2.</span> <span class="token operator">*</span> <span class="token function">vec3</span><span class="token punctuation">(</span>q<span class="token punctuation">)</span> <span class="token operator">*</span> UIF<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">float</span> <span class="token function">remap</span><span class="token punctuation">(</span><span class="token keyword">float</span> x<span class="token punctuation">,</span> <span class="token keyword">float</span> a<span class="token punctuation">,</span> <span class="token keyword">float</span> b<span class="token punctuation">,</span> <span class="token keyword">float</span> c<span class="token punctuation">,</span> <span class="token keyword">float</span> d<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">(</span>x <span class="token operator">-</span> a<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token punctuation">(</span>b <span class="token operator">-</span> a<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span>d <span class="token operator">-</span> c<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">&#43;</span> c<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// Gradient noise by iq (modified to be tileable)</span>
<span class="token keyword">float</span> <span class="token function">gradientNoise</span><span class="token punctuation">(</span>vec3 x<span class="token punctuation">,</span> <span class="token keyword">float</span> freq<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token comment">// grid</span>
vec3 p <span class="token operator">&#61;</span> <span class="token function">floor</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 w <span class="token operator">&#61;</span> <span class="token function">fract</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// quintic interpolant</span>
vec3 u <span class="token operator">&#61;</span> w <span class="token operator">*</span> w <span class="token operator">*</span> w <span class="token operator">*</span> <span class="token punctuation">(</span>w <span class="token operator">*</span> <span class="token punctuation">(</span>w <span class="token operator">*</span> <span class="token number">6.</span> <span class="token operator">-</span> <span class="token number">15.</span><span class="token punctuation">)</span> <span class="token operator">&#43;</span> <span class="token number">10.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// gradients</span>
vec3 ga <span class="token operator">&#61;</span> <span class="token function">hash33</span><span class="token punctuation">(</span><span class="token function">mod</span><span class="token punctuation">(</span>p <span class="token operator">&#43;</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">,</span> freq<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 gb <span class="token operator">&#61;</span> <span class="token function">hash33</span><span class="token punctuation">(</span><span class="token function">mod</span><span class="token punctuation">(</span>p <span class="token operator">&#43;</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">,</span> freq<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 gc <span class="token operator">&#61;</span> <span class="token function">hash33</span><span class="token punctuation">(</span><span class="token function">mod</span><span class="token punctuation">(</span>p <span class="token operator">&#43;</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">,</span> freq<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 gd <span class="token operator">&#61;</span> <span class="token function">hash33</span><span class="token punctuation">(</span><span class="token function">mod</span><span class="token punctuation">(</span>p <span class="token operator">&#43;</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">,</span> freq<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 ge <span class="token operator">&#61;</span> <span class="token function">hash33</span><span class="token punctuation">(</span><span class="token function">mod</span><span class="token punctuation">(</span>p <span class="token operator">&#43;</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">,</span> freq<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 gf <span class="token operator">&#61;</span> <span class="token function">hash33</span><span class="token punctuation">(</span><span class="token function">mod</span><span class="token punctuation">(</span>p <span class="token operator">&#43;</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">,</span> freq<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 gg <span class="token operator">&#61;</span> <span class="token function">hash33</span><span class="token punctuation">(</span><span class="token function">mod</span><span class="token punctuation">(</span>p <span class="token operator">&#43;</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">,</span> freq<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 gh <span class="token operator">&#61;</span> <span class="token function">hash33</span><span class="token punctuation">(</span><span class="token function">mod</span><span class="token punctuation">(</span>p <span class="token operator">&#43;</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">,</span> freq<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// projections</span>
<span class="token keyword">float</span> va <span class="token operator">&#61;</span> <span class="token function">dot</span><span class="token punctuation">(</span>ga<span class="token punctuation">,</span> w <span class="token operator">-</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> vb <span class="token operator">&#61;</span> <span class="token function">dot</span><span class="token punctuation">(</span>gb<span class="token punctuation">,</span> w <span class="token operator">-</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> vc <span class="token operator">&#61;</span> <span class="token function">dot</span><span class="token punctuation">(</span>gc<span class="token punctuation">,</span> w <span class="token operator">-</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> vd <span class="token operator">&#61;</span> <span class="token function">dot</span><span class="token punctuation">(</span>gd<span class="token punctuation">,</span> w <span class="token operator">-</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> ve <span class="token operator">&#61;</span> <span class="token function">dot</span><span class="token punctuation">(</span>ge<span class="token punctuation">,</span> w <span class="token operator">-</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> vf <span class="token operator">&#61;</span> <span class="token function">dot</span><span class="token punctuation">(</span>gf<span class="token punctuation">,</span> w <span class="token operator">-</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> vg <span class="token operator">&#61;</span> <span class="token function">dot</span><span class="token punctuation">(</span>gg<span class="token punctuation">,</span> w <span class="token operator">-</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> vh <span class="token operator">&#61;</span> <span class="token function">dot</span><span class="token punctuation">(</span>gh<span class="token punctuation">,</span> w <span class="token operator">-</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// interpolation</span>
<span class="token keyword">return</span> va <span class="token operator">&#43;</span>
u<span class="token punctuation">.</span>x <span class="token operator">*</span> <span class="token punctuation">(</span>vb <span class="token operator">-</span> va<span class="token punctuation">)</span> <span class="token operator">&#43;</span>
u<span class="token punctuation">.</span>y <span class="token operator">*</span> <span class="token punctuation">(</span>vc <span class="token operator">-</span> va<span class="token punctuation">)</span> <span class="token operator">&#43;</span>
u<span class="token punctuation">.</span>z <span class="token operator">*</span> <span class="token punctuation">(</span>ve <span class="token operator">-</span> va<span class="token punctuation">)</span> <span class="token operator">&#43;</span>
u<span class="token punctuation">.</span>x <span class="token operator">*</span> u<span class="token punctuation">.</span>y <span class="token operator">*</span> <span class="token punctuation">(</span>va <span class="token operator">-</span> vb <span class="token operator">-</span> vc <span class="token operator">&#43;</span> vd<span class="token punctuation">)</span> <span class="token operator">&#43;</span>
u<span class="token punctuation">.</span>y <span class="token operator">*</span> u<span class="token punctuation">.</span>z <span class="token operator">*</span> <span class="token punctuation">(</span>va <span class="token operator">-</span> vc <span class="token operator">-</span> ve <span class="token operator">&#43;</span> vg<span class="token punctuation">)</span> <span class="token operator">&#43;</span>
u<span class="token punctuation">.</span>z <span class="token operator">*</span> u<span class="token punctuation">.</span>x <span class="token operator">*</span> <span class="token punctuation">(</span>va <span class="token operator">-</span> vb <span class="token operator">-</span> ve <span class="token operator">&#43;</span> vf<span class="token punctuation">)</span> <span class="token operator">&#43;</span>
u<span class="token punctuation">.</span>x <span class="token operator">*</span> u<span class="token punctuation">.</span>y <span class="token operator">*</span> u<span class="token punctuation">.</span>z <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token operator">-</span>va <span class="token operator">&#43;</span> vb <span class="token operator">&#43;</span> vc <span class="token operator">-</span> vd <span class="token operator">&#43;</span> ve <span class="token operator">-</span> vf <span class="token operator">-</span> vg <span class="token operator">&#43;</span> vh<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// Tileable 3D worley noise</span>
<span class="token keyword">float</span> <span class="token function">worleyNoise</span><span class="token punctuation">(</span>vec3 uv<span class="token punctuation">,</span> <span class="token keyword">float</span> freq<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
vec3 id <span class="token operator">&#61;</span> <span class="token function">floor</span><span class="token punctuation">(</span>uv<span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 p <span class="token operator">&#61;</span> <span class="token function">fract</span><span class="token punctuation">(</span>uv<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> minDist <span class="token operator">&#61;</span> <span class="token number">10000.</span><span class="token punctuation">;</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">float</span> x <span class="token operator">&#61;</span> <span class="token operator">-</span><span class="token number">1.</span><span class="token punctuation">;</span> x <span class="token operator">&lt;&#61;</span> <span class="token number">1.</span><span class="token punctuation">;</span> <span class="token operator">&#43;&#43;</span>x<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">float</span> y <span class="token operator">&#61;</span> <span class="token operator">-</span><span class="token number">1.</span><span class="token punctuation">;</span> y <span class="token operator">&lt;&#61;</span> <span class="token number">1.</span><span class="token punctuation">;</span> <span class="token operator">&#43;&#43;</span>y<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">float</span> z <span class="token operator">&#61;</span> <span class="token operator">-</span><span class="token number">1.</span><span class="token punctuation">;</span> z <span class="token operator">&lt;&#61;</span> <span class="token number">1.</span><span class="token punctuation">;</span> <span class="token operator">&#43;&#43;</span>z<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
vec3 offset <span class="token operator">&#61;</span> <span class="token function">vec3</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> z<span class="token punctuation">)</span><span class="token punctuation">;</span>
vec3 h <span class="token operator">&#61;</span> <span class="token function">hash33</span><span class="token punctuation">(</span><span class="token function">mod</span><span class="token punctuation">(</span>id <span class="token operator">&#43;</span> offset<span class="token punctuation">,</span> <span class="token function">vec3</span><span class="token punctuation">(</span>freq<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">.5</span> <span class="token operator">&#43;</span> <span class="token number">.5</span><span class="token punctuation">;</span>
h <span class="token operator">&#43;&#61;</span> offset<span class="token punctuation">;</span>
vec3 d <span class="token operator">&#61;</span> p <span class="token operator">-</span> h<span class="token punctuation">;</span>
minDist <span class="token operator">&#61;</span> <span class="token function">min</span><span class="token punctuation">(</span>minDist<span class="token punctuation">,</span> <span class="token function">dot</span><span class="token punctuation">(</span>d<span class="token punctuation">,</span> d<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token comment">// inverted worley noise</span>
<span class="token keyword">return</span> <span class="token number">1.</span> <span class="token operator">-</span> minDist<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// Fbm for Perlin noise based on iq&#39;s blog</span>
<span class="token keyword">float</span> <span class="token function">perlinfbm</span><span class="token punctuation">(</span>vec3 p<span class="token punctuation">,</span> <span class="token keyword">float</span> freq<span class="token punctuation">,</span> <span class="token keyword">int</span> octaves<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token keyword">float</span> <span class="token class-name">G</span> <span class="token operator">&#61;</span> <span class="token function">exp2</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">.85</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> amp <span class="token operator">&#61;</span> <span class="token number">1.</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> noise <span class="token operator">&#61;</span> <span class="token number">0.</span><span class="token punctuation">;</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">&#61;</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> octaves<span class="token punctuation">;</span> <span class="token operator">&#43;&#43;</span>i<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
noise <span class="token operator">&#43;&#61;</span> amp <span class="token operator">*</span> <span class="token function">gradientNoise</span><span class="token punctuation">(</span>p <span class="token operator">*</span> freq<span class="token punctuation">,</span> freq<span class="token punctuation">)</span><span class="token punctuation">;</span>
freq <span class="token operator">*&#61;</span> <span class="token number">2.</span><span class="token punctuation">;</span>
amp <span class="token operator">*&#61;</span> <span class="token class-name">G</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">return</span> noise<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">// Tileable Worley fbm inspired by Andrew Schneider&#39;s Real-Time Volumetric Cloudscapes</span>
<span class="token comment">// chapter in GPU Pro 7.</span>
<span class="token keyword">float</span> <span class="token function">worleyFbm</span><span class="token punctuation">(</span>vec3 p<span class="token punctuation">,</span> <span class="token keyword">float</span> freq<span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
<span class="token keyword">return</span> <span class="token function">worleyNoise</span><span class="token punctuation">(</span>p<span class="token operator">*</span>freq<span class="token punctuation">,</span> freq<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">.625</span> <span class="token operator">&#43;</span>
<span class="token function">worleyNoise</span><span class="token punctuation">(</span>p<span class="token operator">*</span>freq<span class="token operator">*</span><span class="token number">2.</span><span class="token punctuation">,</span> freq<span class="token operator">*</span><span class="token number">2.</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">.25</span> <span class="token operator">&#43;</span>
<span class="token function">worleyNoise</span><span class="token punctuation">(</span>p<span class="token operator">*</span>freq<span class="token operator">*</span><span class="token number">4.</span><span class="token punctuation">,</span> freq<span class="token operator">*</span><span class="token number">4.</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">.125</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span> <span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
vec2 uv <span class="token operator">&#61;</span> v_st<span class="token punctuation">;</span>
<span class="token keyword">float</span> iTime<span class="token operator">&#61;</span>czm_frameNumber<span class="token operator">/</span><span class="token number">100.</span><span class="token punctuation">;</span>
uv <span class="token operator">-&#61;</span> <span class="token number">.02</span> <span class="token operator">*</span> iTime<span class="token punctuation">;</span>
vec2 m <span class="token operator">&#61;</span> <span class="token function">vec2</span><span class="token punctuation">(</span><span class="token number">0.5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
vec4 col <span class="token operator">&#61;</span> <span class="token function">vec4</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> slices <span class="token operator">&#61;</span> <span class="token number">128.</span><span class="token punctuation">;</span> <span class="token comment">// number of layers of the 3d texture</span>
<span class="token keyword">float</span> freq <span class="token operator">&#61;</span> <span class="token number">4.</span><span class="token punctuation">;</span>
<span class="token keyword">float</span> pfbm<span class="token operator">&#61;</span> <span class="token function">mix</span><span class="token punctuation">(</span><span class="token number">1.</span><span class="token punctuation">,</span> <span class="token function">perlinfbm</span><span class="token punctuation">(</span><span class="token function">vec3</span><span class="token punctuation">(</span>uv<span class="token punctuation">,</span> <span class="token function">floor</span><span class="token punctuation">(</span>m<span class="token punctuation">.</span>y<span class="token operator">*</span>slices<span class="token punctuation">)</span><span class="token operator">/</span>slices<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">4.</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">.5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
pfbm <span class="token operator">&#61;</span> <span class="token function">abs</span><span class="token punctuation">(</span>pfbm <span class="token operator">*</span> <span class="token number">2.</span> <span class="token operator">-</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// billowy perlin noise</span>
col<span class="token punctuation">.</span>g <span class="token operator">&#43;&#61;</span> <span class="token function">worleyFbm</span><span class="token punctuation">(</span><span class="token function">vec3</span><span class="token punctuation">(</span>uv<span class="token punctuation">,</span> <span class="token function">floor</span><span class="token punctuation">(</span>m<span class="token punctuation">.</span>y<span class="token operator">*</span>slices<span class="token punctuation">)</span><span class="token operator">/</span>slices<span class="token punctuation">)</span><span class="token punctuation">,</span> freq<span class="token punctuation">)</span><span class="token punctuation">;</span>
col<span class="token punctuation">.</span>b <span class="token operator">&#43;&#61;</span> <span class="token function">worleyFbm</span><span class="token punctuation">(</span><span class="token function">vec3</span><span class="token punctuation">(</span>uv<span class="token punctuation">,</span> <span class="token function">floor</span><span class="token punctuation">(</span>m<span class="token punctuation">.</span>y<span class="token operator">*</span>slices<span class="token punctuation">)</span><span class="token operator">/</span>slices<span class="token punctuation">)</span><span class="token punctuation">,</span> freq<span class="token operator">*</span><span class="token number">2.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
col<span class="token punctuation">.</span>a <span class="token operator">&#43;&#61;</span> <span class="token function">worleyFbm</span><span class="token punctuation">(</span><span class="token function">vec3</span><span class="token punctuation">(</span>uv<span class="token punctuation">,</span> <span class="token function">floor</span><span class="token punctuation">(</span>m<span class="token punctuation">.</span>y<span class="token operator">*</span>slices<span class="token punctuation">)</span><span class="token operator">/</span>slices<span class="token punctuation">)</span><span class="token punctuation">,</span> freq<span class="token operator">*</span><span class="token number">4.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
col<span class="token punctuation">.</span>r <span class="token operator">&#43;&#61;</span> <span class="token function">remap</span><span class="token punctuation">(</span>pfbm<span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> col<span class="token punctuation">.</span>g<span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// perlin-worley </span>
<span class="token keyword">float</span> perlinWorley <span class="token operator">&#61;</span> col<span class="token punctuation">.</span>r<span class="token punctuation">;</span>
<span class="token comment">// worley fbms with different frequencies</span>
vec3 worley <span class="token operator">&#61;</span> col<span class="token punctuation">.</span>yzw<span class="token punctuation">;</span>
<span class="token keyword">float</span> wfbm <span class="token operator">&#61;</span> worley<span class="token punctuation">.</span>x <span class="token operator">*</span> <span class="token number">.625</span> <span class="token operator">&#43;</span>
worley<span class="token punctuation">.</span>y <span class="token operator">*</span> <span class="token number">.125</span> <span class="token operator">&#43;</span>
worley<span class="token punctuation">.</span>z <span class="token operator">*</span> <span class="token number">.25</span><span class="token punctuation">;</span>
<span class="token comment">// cloud shape modeled after the GPU Pro 7 chapter</span>
<span class="token keyword">float</span> cloud <span class="token operator">&#61;</span> <span class="token function">remap</span><span class="token punctuation">(</span>perlinWorley<span class="token punctuation">,</span> wfbm <span class="token operator">-</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
cloud <span class="token operator">&#61;</span> <span class="token function">remap</span><span class="token punctuation">(</span>cloud<span class="token punctuation">,</span> <span class="token number">.65</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">,</span> <span class="token number">0.</span><span class="token punctuation">,</span> <span class="token number">1.</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// fake cloud coverage</span>
vec3 col_ <span class="token operator">&#61;</span> <span class="token function">vec3</span><span class="token punctuation">(</span><span class="token number">0.</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
col_ <span class="token operator">&#43;&#61;</span> cloud<span class="token punctuation">;</span>
out_FragColor <span class="token operator">&#61;</span> <span class="token function">vec4</span><span class="token punctuation">(</span>col_<span class="token punctuation">,</span>col<span class="token punctuation">.</span>r<span class="token punctuation">)</span><span class="token punctuation">;</span> &#96;
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
<p>这样就实现了体积云类似效果<br /> <img src="https://img-blog.csdnimg.cn/img_convert/e7a0064f7be091b39669a0d187bd687d.gif#pic_center" alt="在这里插入图片描述" /></p>
<p><strong>七、流体水面</strong><br /> 示例地址&#xff1a;https://www.shadertoy.com/view/4dd3Rl<br /> <img src="https://img-blog.csdnimg.cn/img_convert/3b3a587355ac37226ff923d00a3b3501.png#pic_center" alt="在这里插入图片描述" /></p>
<p>取到代码在cesium中如何使用参考上面体积云的示例&#xff0c;步骤相同。</p>
</div>
<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-f23dff6052.css" rel="stylesheet">
<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-e504d6a974.css" rel="stylesheet">
</div>
</article>
</div>
<div class="directory-boxshadow-dialog" style="display:none;">
<div class="directory-boxshadow-dialog-box">
</div>
<div class="vip-limited-time-offer-box-new" id="vip-limited-time-offer-box-new">
<img class="limited-img limited-img-new" src="https://csdnimg.cn/release/blogv2/dist/pc/img/vip-limited-close-newWhite.png">
<div class="vip-limited-time-top">
确定要放弃本次机会?
</div>
<span class="vip-limited-time-text">福利倒计时</span>
<div class="limited-time-box-new">
<span class="time-hour"></span>
<i>:</i>
<span class="time-minite"></span>
<i>:</i>
<span class="time-second"></span>
</div>
<div class="limited-time-vip-box">
<p>
<img class="coupon-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/vip-limited-close-roup.png">
<span class="def">立减 ¥</span>
<span class="active limited-num"></span>
</p>
<span class="">普通VIP年卡可用</span>
</div>
<a class="limited-time-btn-new" href="https://mall.csdn.net/vip" data-report-click='{"spm":"1001.2101.3001.9621"}' data-report-query='spm=1001.2101.3001.9621'>立即使用</a>
</div>
</div> <div class="more-toolbox-new more-toolbar" id="toolBarBox">
<div class="left-toolbox">
<div class="toolbox-left">
<div class="profile-box">
<a class="profile-href" target="_blank" href="https://blog.csdn.net/weixin_43700915"><img class="profile-img" src="https://profile-avatar.csdnimg.cn/6505fd474db340f5b8e8cb2c8b008465_weixin_43700915.jpg!1">
<span class="profile-name">
Cesium进阶学习
</span>
</a>
</div>
<div class="profile-attend">
<a class="tool-attend tool-bt-button tool-bt-attend" href="javascript:;" data-report-view='{"mod":"1592215036_002","spm":"1001.2101.3001.4232","extend1":"关注"}'>关注</a>
<a class="tool-item-follow active-animation" style="display:none;">关注</a>
</div>
</div>
<div class="toolbox-middle">
<ul class="toolbox-list">
<li class="tool-item tool-item-size tool-active is-like" id="is-like">
<a class="tool-item-href">
<img style="display:none;" id="is-like-imgactive-animation-like" class="animation-dom active-animation" src="https://csdnimg.cn/release/blogv2/dist/pc/img/tobarThumbUpactive.png" alt="">
<img class="isactive" style="display:none" id="is-like-imgactive" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/like-active.png" alt="">
<img class="isdefault" style="display:block" id="is-like-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/like.png" alt="">
<span id="spanCount" class="count ">
23
</span>
</a>
<div class="tool-hover-tip"><span class="text space">点赞</span></div>
</li>
<li class="tool-item tool-item-size tool-active is-unlike" id="is-unlike">
<a class="tool-item-href">
<img class="isactive" style="margin-right:0px;display:none" id="is-unlike-imgactive" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/unlike-active.png" alt="">
<img class="isdefault" style="margin-right:0px;display:block" id="is-unlike-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/unlike.png" alt="">
<span id="unlikeCount" class="count "></span>
</a>
<div class="tool-hover-tip"><span class="text space"></span></div>
</li>
<li class="tool-item tool-item-size tool-active is-collection ">
<a class="tool-item-href" href="javascript:;" data-report-click='{"mod":"popu_824","spm":"1001.2101.3001.4130","ab":"new"}'>
<img style="display:none" id="is-collection-img-collection" class="animation-dom active-animation" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/collect-active.png" alt="">
<img class="isdefault" id="is-collection-img" style="display:block" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/collect.png" alt="">
<img class="isactive" id="is-collection-imgactive" style="display:none" src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCollectActive.png" alt="">
<span class="count get-collection " data-num="12" id="get-collection">
12
</span>
</a>
<div class="tool-hover-tip collect">
<div class="collect-operate-box">
<span class="collect-text" id="is-collection">
收藏
</span>
</div>
</div>
<div class="tool-active-list">
<div class="text">
觉得还不错?
<span class="collect-text" id="tool-active-list-collection">
一键收藏
</span>
<img id="tool-active-list-close" src="https://csdnimg.cn/release/blogv2/dist/pc/img/collectionCloseWhite.png" alt="">
</div>
</div>
</li>
<li class="tool-item tool-item-size tool-active tool-item-comment">
<div class="guide-rr-first">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/guideRedReward01.png" alt="">
<button class="btn-guide-known">知道了</button>
</div>
<a class="tool-item-href go-side-comment" data-report-click='{"spm":"1001.2101.3001.7009"}'>
<img class="isdefault" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/comment.png" alt="">
<span class="count">
0
</span>
</a>
<div class="tool-hover-tip"><span class="text space">评论</span></div>
</li>
<li class="tool-item tool-item-size tool-active tool-QRcode" data-type="article" id="tool-share">
<a class="tool-item-href" href="javascript:;" data-report-view='{"spm":"3001.4129","extra":{"type":"blogdetail"}}'>
<img class="isdefault" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/share.png" alt="">
<span class="count">分享</span>
</a>
<div class="QRcode active" id="tool-QRcode">
<div class="share-bg-box">
<div class="share-content">
<a id="copyPosterUrl" data-type="link" class="btn-share">复制链接</a>
</div>
<div class="share-content">
<a class="btn-share" data-type="qq">分享到 QQ</a>
</div>
<div class="share-content">
<a class="btn-share" data-type="weibo">分享到新浪微博</a>
</div>
<div class="share-code">
<div class="share-code-box" id='shareCode'></div>
<div class="share-code-text">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/share/icon-wechat.png" alt="">扫一扫
</div>
</div>
</div>
</div>
</li>
<li class="tool-item tool-item-size tool-active tool-item-reward">
<a class="tool-item-href" href="javascript:;" data-report-click='{"mod":"popu_830","spm":"1001.2101.3001.4237","dest":"","ab":"new"}'>
<img class="isdefault reward-bt" id="rewardBtNew" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/reward.png" alt="打赏">
<span class="count">打赏</span>
</a>
<div class="tool-hover-tip"><span class="text space">打赏</span></div>
</li>
<li class="tool-item tool-item-size tool-active is-more" id="is-more">
<a class="tool-item-href">
<img class="isdefault" style="margin-right:0px;display:block" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/more.png" alt="">
<span class="count"></span>
</a>
<div class="more-opt-box">
<div class="mini-box">
<a class="tool-item-href" id="rewardBtNewHide" data-report-click='{"spm":"3001.4237","extra":"{\"type\":\"hide\"}"}'>
<img class="isdefault reward-bt" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/reward.png" alt="打赏">
<span class="count">打赏</span>
</a>
<a class="tool-item-href" id="toolReportBtnHide">
<img class="isdefault" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/report.png" alt="">
<span class="count">举报</span>
</a>
</div>
<div class="normal-box">
<a class="tool-item-href" id="toolReportBtnHideNormal">
<img class="isdefault" src="https://csdnimg.cn/release/blogv2/dist/pc/img/toolbar/report.png" alt="">
<span class="count">举报</span>
</a>
</div>
</div>
</li>
</ul>
</div>
<div class="toolbox-right">
<div class="tool-directory">
<a class="bt-columnlist-show"
data-id="12801806"
data-free="true"
data-description="Cesium进阶学习涵盖primitive、appearance、着色器、后处理、贴图、材质、裁剪压平等进阶知识"
data-subscribe="false"
data-title="Cesium进阶学习"
data-img="https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64"
data-url="https://blog.csdn.net/weixin_43700915/category_12801806.html"
data-sum="9"
data-people="3"
data-price="0"
data-hotRank="0"
data-status="true"
data-oldprice="0"
data-join="false"
data-studyvip="true"
data-studysubscribe="false"
data-report-view='{"spm":"1001.2101.3001.6334","extend1":"专栏目录"}'
data-report-click='{"spm":"1001.2101.3001.6334","extend1":"专栏目录"}'>专栏目录</a>
</div>
</div>
</div>
</div>
<a id="commentBox" name="commentBox"></a>
<div id="pcCommentBox" class="comment-box comment-box-new2 login-comment-box-new" style="display:none">
<div class="has-comment" style="display:block">
<div class="one-line-box">
<div class="has-comment-tit go-side-comment">
<span class="count">0</span>&nbsp;条评论
</div>
<div class="has-comment-con comment-operate-item"></div>
<a class="has-comment-bt-right go-side-comment focus">写评论</a>
</div>
</div>
</div>
<div class="first-recommend-box recommend-box recommend-highlight-default">
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/weixin_44857463/article/details/129130377" data-report-view='{"ab":"new","spm":"1001.2101.3001.6661.1","mod":"popu_871","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromBaidu~Rate-1-129130377-blog-142754373.235^v43^pc_blog_bottom_relevance_base9\",\"dist_request_id\":\"1733207986875_37692\"}","dist_request_id":"1733207986875_37692","ab_strategy":"vipdefault","index":"1","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://blog.csdn.net/weixin_44857463/article/details/129130377"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<span class="type">
<img src="https://csdnimg.cn/release/blogv2/dist/components/img/blogType.png" alt="">
<span class="tip">博客</span>
</span>
<a href="https://blog.csdn.net/weixin_44857463/article/details/129130377" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6661.1","mod":"popu_871","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromBaidu~Rate-1-129130377-blog-142754373.235^v43^pc_blog_bottom_relevance_base9\",\"dist_request_id\":\"1733207986875_37692\"}","dist_request_id":"1733207986875_37692","ab_strategy":"vipdefault","index":"1","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://blog.csdn.net/weixin_44857463/article/details/129130377"}' data-report-query='spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-129130377-blog-142754373.235%5Ev43%5Epc_blog_bottom_relevance_base9&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-129130377-blog-142754373.235%5Ev43%5Epc_blog_bottom_relevance_base9'>
<div class="left ellipsis-online ellipsis-online-1"><em>Cesium</em>简介及发展历史</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/weixin_44857463" target="_blank"><span class="blog-title">纸飞机的旅行的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">02-20</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
8045
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/weixin_44857463/article/details/129130377" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6661.1","mod":"popu_871","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromBaidu~Rate-1-129130377-blog-142754373.235^v43^pc_blog_bottom_relevance_base9\",\"dist_request_id\":\"1733207986875_37692\"}","dist_request_id":"1733207986875_37692","ab_strategy":"vipdefault","index":"1","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://blog.csdn.net/weixin_44857463/article/details/129130377"}' data-report-query='spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-129130377-blog-142754373.235%5Ev43%5Epc_blog_bottom_relevance_base9&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-129130377-blog-142754373.235%5Ev43%5Epc_blog_bottom_relevance_base9'>
<div class="desc ellipsis-online ellipsis-online-1"><em>Cesium</em>简介及发展历史</div>
</a>
</div>
</div>
</div>
</div>
<div class="second-recommend-box recommend-box recommend-highlight-default">
<div class="recommend-item-box type_blog clearfix" data-url="https://blog.csdn.net/TqbcAbap/article/details/133212970" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.1","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-1-133212970-blog-142754373.235^v43^pc_blog_bottom_relevance_base9\",\"dist_request_id\":\"1733207986875_37692\"}","dist_request_id":"1733207986875_37692","ab_strategy":"vipdefault","index":"1","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://blog.csdn.net/TqbcAbap/article/details/133212970"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<span class="type">
<img src="https://csdnimg.cn/release/blogv2/dist/components/img/blogType.png" alt="">
<span class="tip">博客</span>
</span>
<a href="https://blog.csdn.net/TqbcAbap/article/details/133212970" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.1","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-1-133212970-blog-142754373.235^v43^pc_blog_bottom_relevance_base9\",\"dist_request_id\":\"1733207986875_37692\"}","dist_request_id":"1733207986875_37692","ab_strategy":"vipdefault","index":"1","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://blog.csdn.net/TqbcAbap/article/details/133212970"}' data-report-query='spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-133212970-blog-142754373.235%5Ev43%5Epc_blog_bottom_relevance_base9&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-133212970-blog-142754373.235%5Ev43%5Epc_blog_bottom_relevance_base9'>
<div class="left ellipsis-online ellipsis-online-1"><em>Cesium</em> 颜色过渡渲染 - <em>Shader</em></div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/TqbcAbap" target="_blank"><span class="blog-title">TqbcAbap的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">09-23</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
931
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://blog.csdn.net/TqbcAbap/article/details/133212970" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.1","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-1-133212970-blog-142754373.235^v43^pc_blog_bottom_relevance_base9\",\"dist_request_id\":\"1733207986875_37692\"}","dist_request_id":"1733207986875_37692","ab_strategy":"vipdefault","index":"1","strategy":"2~default~BlogCommendFromBaidu~Rate","dest":"https://blog.csdn.net/TqbcAbap/article/details/133212970"}' data-report-query='spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-133212970-blog-142754373.235%5Ev43%5Epc_blog_bottom_relevance_base9&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-133212970-blog-142754373.235%5Ev43%5Epc_blog_bottom_relevance_base9'>
<div class="desc ellipsis-online ellipsis-online-1"><em>Cesium</em>中,我们可以使用<em>着色器</em><em>Shader</em>)来实现颜色的渐变效果。<em>着色器</em>是一种在图形渲染过程中控制颜色、纹理和光照等方面的工具。通过编写自定义的<em>着色器</em>代码,我们可以实现各种独特的视觉效果。为了实现颜色的渐变效果,我们需要编写一个简单的片段<em>着色器</em>Fragment <em>Shader</em>)。通过使用该插值因子,我们可以根据垂直位置来计算颜色的过渡效果。在使用这段<em>着色器</em>代码之前,我们需要将其与<em>Cesium</em>的渲染管道进行关联。是传入的Uniform变量用来指定起始颜色和结束颜色。函数来插值计算当前片段的颜色。</div>
</a>
</div>
</div>
</div>
</div>
<div class="recommend-box insert-baidu-box recommend-highlight-default">
<div class="recommend-item-box no-index" style="display:none"></div>
<div class="recommend-item-box type_blog clearfix" data-url="https://devpress.csdn.net/v1/article/detail/142935446" data-report-view='{"ab":"new","spm":"1001.2101.3001.6650.2","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~activity-2-142935446-blog-142754373.235^v43^pc_blog_bottom_relevance_base9\",\"dist_request_id\":\"1733207986875_37692\"}","dist_request_id":"1733207986875_37692","ab_strategy":"vipdefault","index":"2","strategy":"2~default~BlogCommendFromBaidu~activity","dest":"https://devpress.csdn.net/v1/article/detail/142935446"}'>
<div class="content-box">
<div class="content-blog display-flex">
<div class="title-box">
<span class="type">
<img src="https://csdnimg.cn/release/blogv2/dist/components/img/blogType.png" alt="">
<span class="tip">博客</span>
</span>
<a href="https://devpress.csdn.net/v1/article/detail/142935446" class="tit" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.2","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~activity-2-142935446-blog-142754373.235^v43^pc_blog_bottom_relevance_base9\",\"dist_request_id\":\"1733207986875_37692\"}","dist_request_id":"1733207986875_37692","ab_strategy":"vipdefault","index":"2","strategy":"2~default~BlogCommendFromBaidu~activity","dest":"https://devpress.csdn.net/v1/article/detail/142935446"}' data-report-query='spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-2-142935446-blog-142754373.235%5Ev43%5Epc_blog_bottom_relevance_base9&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-2-142935446-blog-142754373.235%5Ev43%5Epc_blog_bottom_relevance_base9'>
<div class="left ellipsis-online ellipsis-online-1"><em>Cesium</em><em>学习</em>笔记</div>
<div class="tag">最新发布</div>
</a>
</div>
<div class="info-box display-flex">
<div class="info">
<a href="https://blog.csdn.net/weixin_57468559" target="_blank"><span class="blog-title">weixin_57468559的博客</span></a>
</div>
<div class="info display-flex">
<span class="info-block time">10-15</span>
<span class="info-block read"><img class="read-img" src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
2308
</span>
</div>
</div>
</div>
<div class="desc-box">
<a href="https://devpress.csdn.net/v1/article/detail/142935446" target="_blank" data-report-click='{"ab":"new","spm":"1001.2101.3001.6650.2","mod":"popu_387","extra":"{\"highlightScore\":0.0,\"utm_medium\":\"distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~activity-2-142935446-blog-142754373.235^v43^pc_blog_bottom_relevance_base9\",\"dist_request_id\":\"1733207986875_37692\"}","dist_request_id":"1733207986875_37692","ab_strategy":"vipdefault","index":"2","strategy":"2~default~BlogCommendFromBaidu~activity","dest":"https://devpress.csdn.net/v1/article/detail/142935446"}' data-report-query='spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-2-142935446-blog-142754373.235%5Ev43%5Epc_blog_bottom_relevance_base9&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-2-142935446-blog-142754373.235%5Ev43%5Epc_blog_bottom_relevance_base9'>
<div class="desc ellipsis-online ellipsis-online-1"><em>Cesium</em>是便用JavaScript开发的基于WebGL的实现三维地球和地图可视化的JS库<em>Cesium</em>支持海量的三维模型数据,影像数据,地形高程数据,失量数据等丰富的地理教据的加载。在交通,规划,城市管理,地形仿真等领城有非常广泛的应用。<em>Cesium</em>为三维的GIS提供了一个高效的数据可视化平台。中文文档官网例子<em>Cesium</em>的特点①、跨平台,跨浏览器,无插件②、强大的地理数据可视化能力。<em>Cesium</em>自定义的3D Tiles数据格式支持海量数据渲染。</div>
</a>
</div>
</div>
</div>
</div>
<div class="blog-footer-bottom" style="margin-top:10px;"></div>
</main>
<aside class="blog_container_aside">
<div id="asideProfile" class="aside-box">
<div class="profile-intro d-flex">
<div class="avatar-box d-flex justify-content-center flex-column">
<a href="https://blog.csdn.net/weixin_43700915" target="_blank" data-report-click='{"mod":"popu_379","spm":"1001.2101.3001.4121","dest":"https://blog.csdn.net/weixin_43700915","ab":"new"}'>
<img src="https://profile-avatar.csdnimg.cn/6505fd474db340f5b8e8cb2c8b008465_weixin_43700915.jpg!1" class="avatar_pic">
</a>
</div>
<div class="user-info d-flex flex-column profile-intro-name-box">
<div class="profile-intro-name-boxTop">
<a href="https://blog.csdn.net/weixin_43700915" target="_blank" class="" id="uid" title="Cesium进阶学习" data-report-click='{"mod":"popu_379","spm":"1001.2101.3001.4122","dest":"https://blog.csdn.net/weixin_43700915","ab":"new"}'>
<span class="name " username="weixin_43700915">Cesium进阶学习</span>
</a>
<span>
</span>
<span class="flag expert-blog">
<span class="bubble">CSDN认证博客专家</span>
</span>
<span class="flag company-blog">
<span class="bubble">CSDN认证企业博客</span>
</span>
</div>
<div class="profile-intro-name-boxFooter">
<span class="personal-home-page personal-home-years" title="已加入 CSDN 6年">码龄6年</span>
<span class="personal-home-page">
<a class="personal-home-certification" href="https://i.csdn.net/#/uc/profile?utm_source=14998968" target="_blank" title="暂无认证">
<img src="https://csdnimg.cn/identity/nocErtification.png" alt="">
暂无认证
</a>
</span>
</div>
</div>
</div>
<div class="data-info d-flex item-tiling">
<dl class="text-center" title="34">
<a href="https://blog.csdn.net/weixin_43700915" data-report-click='{"mod":"1598321000_001","spm":"1001.2101.3001.4310"}' data-report-query="t=1">
<dt><span class="count">34</span></dt>
<dd class="font">原创</dd>
</a>
</dl>
<dl class="text-center" data-report-click='{"mod":"1598321000_002","spm":"1001.2101.3001.4311"}' title="66310">
<a href="https://blog.csdn.net/rank/list/weekly" target="_blank">
<dt><span class="count">6万+</span></dt>
<dd class="font">周排名</dd>
</a>
</dl>
<dl class="text-center" title="44232">
<a href="https://blog.csdn.net/rank/list/total" data-report-click='{"mod":"1598321000_003","spm":"1001.2101.3001.4312"}' target="_blank">
<dt><span class="count">4万+</span></dt>
<dd class="font">总排名</dd>
</a>
</dl>
<dl class="text-center" style="min-width:58px" title="32469">
<dt><span class="count">3万+</span></dt>
<dd>访问</dd>
</dl>
<dl class="text-center" title="3级,点击查看等级说明">
<dt><a href="https://blog.csdn.net/blogdevteam/article/details/103478461" target="_blank">
<img class="level" src="https://csdnimg.cn/identity/blog3.png">
</a>
</dt>
<dd>等级</dd>
</dl>
</div>
<div class="item-rank"></div>
<div class="data-info d-flex item-tiling">
<dl class="text-center" title="797">
<dt><span class="count">797</span></dt>
<dd>积分</dd>
</dl>
<dl class="text-center" id="fanBox" title="451">
<dt><span class="count" id="fan">451</span></dt>
<dd>粉丝</dd>
</dl>
<dl class="text-center" title="435">
<dt><span class="count">435</span></dt>
<dd>获赞</dd>
</dl>
<dl class="text-center" title="0">
<dt><span class="count">0</span></dt>
<dd>评论</dd>
</dl>
<dl class="text-center" title="448">
<dt><span class="count">448</span></dt>
<dd>收藏</dd>
</dl>
</div>
<div class="aside-box-footer" data-report-view='{"spm":"3001.4296"}'>
<div class="badge-box d-flex">
<div class="badge d-flex">
<div class="icon-badge" title="持之以恒">
<div class="mouse-box">
<img class="medal-img" data-report-click='{"spm":"3001.4296"}' src="https://csdnimg.cn/346614c9e330420283031521f054f5f0.png" alt="持之以恒">
</div>
</div>
<div class="icon-badge" title="勤写标兵">
<div class="mouse-box">
<img class="medal-img" data-report-click='{"spm":"3001.4296"}' src="https://csdnimg.cn/4bd50883a213407795a31d33d99b94d6.png" alt="勤写标兵">
</div>
</div>
<div class="icon-badge" title="笔耕不辍">
<div class="mouse-box">
<img class="medal-img" data-report-click='{"spm":"3001.4296"}' src="https://csdnimg.cn/70592b2299594e37aedcaa91fc52a294.png" alt="笔耕不辍">
</div>
</div>
<div class="icon-badge" title="创作能手">
<div class="mouse-box">
<img class="medal-img" data-report-click='{"spm":"3001.4296"}' src="https://csdnimg.cn/medal/qixiebiaobing4@240.png" alt="创作能手">
</div>
</div>
</div>
</div>
</div>
<div class="profile-intro-name-boxOpration">
<div class="opt-letter-watch-box">
<a rel="nofollow" class="bt-button personal-letter" href="https://im.csdn.net/chat/weixin_43700915" target="_blank" rel="noopener">私信</a>
</div>
<div class="opt-letter-watch-box">
<a class="personal-watch bt-button" id="btnAttent" >关注</a>
</div>
</div>
</div>
<a id="remuneration" data-report-click='{"spm":"1001.2101.3001.9809"}' rel="nofollow" href="" class="remuneration-box">
<img src="" alt="">
</a>
<div id="asideWriteGuide" class="aside-box side-write-guide-box type-1" data-report-view='{"spm":"3001.9727"}'>
<div class="content-box">
<a rel="nofollow" href="https://edu.csdn.net/cloud/houjie?utm_source=hjblogllq" target="_blank" class="btn-go-write" data-report-query="spm=3001.9727" data-report-click='{"spm":"3001.9727"}'>
<img src="https://img-home.csdnimg.cn/images/20241202111142.jpg" alt="写文章">
</a>
</div>
</div>
<div id="asideSearchArticle" class="aside-box">
<div class="aside-content search-comter">
<div class="aside-search aside-search-blog">
<input type="text" class="input-serch-blog" name="" autocomplete="off" value="" id="search-blog-words" placeholder="搜博主文章">
<a class="btn-search-blog" data-report-click='{"spm":"1001.2101.3001.9182"}'>
<img src="//csdnimg.cn/cdn/content-toolbar/csdn-sou.png?v=1587021042">
</a>
</div>
</div>
</div>
<div id="asideHotArticle" class="aside-box">
<h3 class="aside-title">热门文章</h3>
<div class="aside-content">
<ul class="hotArticle-list">
<li>
<a href="https://blog.csdn.net/weixin_43700915/article/details/142754373" target="_blank" data-report-click='{"mod":"popu_541","spm":"1001.2101.3001.4139","dest":"https://blog.csdn.net/weixin_43700915/article/details/142754373","ab":"new"}'>
Cesium进阶学习四、shadertoy着色器
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">1911</span>
</a>
</li>
<li>
<a href="https://blog.csdn.net/weixin_43700915/article/details/108343542" target="_blank" data-report-click='{"mod":"popu_541","spm":"1001.2101.3001.4139","dest":"https://blog.csdn.net/weixin_43700915/article/details/108343542","ab":"new"}'>
openlayers6.4.3+geoserver+vue
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">1890</span>
</a>
</li>
<li>
<a href="https://blog.csdn.net/weixin_43700915/article/details/142824207" target="_blank" data-report-click='{"mod":"popu_541","spm":"1001.2101.3001.4139","dest":"https://blog.csdn.net/weixin_43700915/article/details/142824207","ab":"new"}'>
Cesium高阶学习十二、体积云
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">1697</span>
</a>
</li>
<li>
<a href="https://blog.csdn.net/weixin_43700915/article/details/140719652" target="_blank" data-report-click='{"mod":"popu_541","spm":"1001.2101.3001.4139","dest":"https://blog.csdn.net/weixin_43700915/article/details/140719652","ab":"new"}'>
Cesium基础教程篇八
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">1629</span>
</a>
</li>
<li>
<a href="https://blog.csdn.net/weixin_43700915/article/details/142821930" target="_blank" data-report-click='{"mod":"popu_541","spm":"1001.2101.3001.4139","dest":"https://blog.csdn.net/weixin_43700915/article/details/142821930","ab":"new"}'>
Cesium高阶学习五、离屏渲染
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png" alt="">
<span class="read">1402</span>
</a>
</li>
</ul>
</div>
</div>
<div id="asideCategory" class="aside-box ">
<h3 class="aside-title">分类专栏</h3>
<div class="aside-content">
<ul>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/weixin_43700915/category_12801783.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/weixin_43700915/category_12801783.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
Cesium基础知识专栏
</span>
</a>
<span class="special-column-num">10篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/weixin_43700915/category_12801806.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/weixin_43700915/category_12801806.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
Cesium进阶学习
</span>
</a>
<span class="special-column-num">9篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/weixin_43700915/category_12801812.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/weixin_43700915/category_12801812.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
Cesium高阶学习
</span>
</a>
<span class="special-column-num">12篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/weixin_43700915/category_12804508.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/weixin_43700915/category_12804508.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
大疆机场
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/weixin_43700915/category_10350338.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/weixin_43700915/category_10350338.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="title oneline">
openlayers+geoserver+vue
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
</ul>
</div>
</div>
<div id="asideArchive" class="aside-box" style="display:block!important; width:300px;">
<h3 class="aside-title">最新文章</h3>
<div class="aside-content">
<ul class="inf_list clearfix">
<li class="clearfix">
<a href="https://blog.csdn.net/weixin_43700915/article/details/142844992" target="_blank" data-report-click='{"mod":"popu_382","spm":"1001.2101.3001.4136","dest":"https://blog.csdn.net/weixin_43700915/article/details/142844992","ab":"new"}' data-report-view='{"mod":"popu_382","dest":"https://blog.csdn.net/weixin_43700915/article/details/142844992","ab":"new"}'>大疆上云Demo注意事项</a>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/weixin_43700915/article/details/142824207" target="_blank" data-report-click='{"mod":"popu_382","spm":"1001.2101.3001.4136","dest":"https://blog.csdn.net/weixin_43700915/article/details/142824207","ab":"new"}' data-report-view='{"mod":"popu_382","dest":"https://blog.csdn.net/weixin_43700915/article/details/142824207","ab":"new"}'>Cesium高阶学习十二、体积云</a>
</li>
<li class="clearfix">
<a href="https://blog.csdn.net/weixin_43700915/article/details/142823936" target="_blank" data-report-click='{"mod":"popu_382","spm":"1001.2101.3001.4136","dest":"https://blog.csdn.net/weixin_43700915/article/details/142823936","ab":"new"}' data-report-view='{"mod":"popu_382","dest":"https://blog.csdn.net/weixin_43700915/article/details/142823936","ab":"new"}'>Cesium高阶学习十一、模型特效</a>
</li>
</ul>
<div class="archive-bar"></div>
<div class="archive-box">
<div class="archive-list-item"><a href="https://blog.csdn.net/weixin_43700915?type=blog&amp;year=2024&amp;month=10" target="_blank" data-report-click='{"mod":"popu_538","spm":"1001.2101.3001.4138","ab":"new","dest":"https://blog.csdn.net/weixin_43700915?type=blog&amp;year=2024&amp;month=10"}'><span class="year">2024年</span><span class="num">32篇</span></a></div>
<div class="archive-list-item"><a href="https://blog.csdn.net/weixin_43700915?type=blog&amp;year=2020&amp;month=09" target="_blank" data-report-click='{"mod":"popu_538","spm":"1001.2101.3001.4138","ab":"new","dest":"https://blog.csdn.net/weixin_43700915?type=blog&amp;year=2020&amp;month=09"}'><span class="year">2020年</span><span class="num">1篇</span></a></div>
<div class="archive-list-item"><a href="https://blog.csdn.net/weixin_43700915?type=blog&amp;year=2019&amp;month=10" target="_blank" data-report-click='{"mod":"popu_538","spm":"1001.2101.3001.4138","ab":"new","dest":"https://blog.csdn.net/weixin_43700915?type=blog&amp;year=2019&amp;month=10"}'><span class="year">2019年</span><span class="num">1篇</span></a></div>
</div>
</div>
</div>
<!-- 详情页显示目录 -->
<!--文章目录-->
<div id="asidedirectory" class="aside-box">
<div class='groupfile' id="directory">
<h3 class="aside-title">目录</h3>
<div class="align-items-stretch group_item">
<div class="pos-box">
<div class="scroll-box">
<div class="toc-box"></div>
</div>
</div>
</div>
</div>
</div>
</aside>
</div>
<div class="recommend-right align-items-stretch clearfix" id="rightAside" data-type="recommend">
<aside class="recommend-right_aside">
<div id="recommend-right" >
<div class='flex-column aside-box groupfile' id="groupfile">
<div class="groupfile-div">
<h3 class="aside-title">目录</h3>
<div class="align-items-stretch group_item">
<div class="pos-box">
<div class="scroll-box">
<div class="toc-box"></div>
</div>
</div>
</div>
</div>
</div>
<div class='aside-box kind_person d-flex flex-column'>
<h3 class="aside-title">分类专栏</h3>
<div class="align-items-stretch kindof_item" id="kind_person_column">
<div class="aside-content">
<ul>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/weixin_43700915/category_12801783.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/weixin_43700915/category_12801783.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
Cesium基础知识专栏
</span>
</a>
<span class="special-column-num">10篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/weixin_43700915/category_12801806.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/weixin_43700915/category_12801806.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
Cesium进阶学习
</span>
</a>
<span class="special-column-num">9篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/weixin_43700915/category_12801812.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/weixin_43700915/category_12801812.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
Cesium高阶学习
</span>
</a>
<span class="special-column-num">12篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/weixin_43700915/category_12804508.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/weixin_43700915/category_12804508.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
大疆机场
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
<li>
<a class="clearfix special-column-name" href="https://blog.csdn.net/weixin_43700915/category_10350338.html" data-report-click='{"mod":"popu_537","spm":"1001.2101.3001.4137","strategy":"pc付费专栏左侧入口","dest":"https://blog.csdn.net/weixin_43700915/category_10350338.html","ab":"new"}'>
<div class="special-column-bar "></div>
<img src="https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64" alt="" onerror="this.src='https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64'">
<span class="">
openlayers+geoserver+vue
</span>
</a>
<span class="special-column-num">1篇</span>
</li>
</ul>
</div>
</div>
</div>
</div>
</aside>
</div>
<div class="recommend-right1 align-items-stretch clearfix" id="rightAsideConcision" data-type="recommend">
<aside class="recommend-right_aside">
<div id="recommend-right-concision" >
<div class='flex-column aside-box groupfile' id="groupfileConcision">
<div class="groupfile-div1">
<h3 class="aside-title">目录</h3>
<div class="align-items-stretch group_item">
<div class="pos-box">
<div class="scroll-box">
<div class="toc-box"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</aside>
</div>
</div>
<div class="mask-dark"></div>
<div class="skin-boxshadow"></div>
<div class="directory-boxshadow"></div>
<div class="comment-side-box-shadow comment-side-tit-close" id="commentSideBoxshadow">
<div class="comment-side-content">
<div class="comment-side-tit">
<span class="comment-side-tit-count">评论</span>
<img class="comment-side-tit-close" src="https://csdnimg.cn/release/blogv2/dist/pc/img/closeBt.png"></div>
<div id="pcCommentSideBox" class="comment-box comment-box-new2 " style="display:block">
<div class="comment-edit-box d-flex">
<div class="user-img">
<a href="https://blog.csdn.net/" target="_blank">
<img src="https://profile-avatar.csdnimg.cn/default.jpg!1">
</a>
</div>
<form id="commentform">
<textarea class="comment-content" name="comment_content" id="comment_content" placeholder="欢迎高质量的评论,低质的评论会被折叠" maxlength="1000"></textarea>
<div class="comment-reward-box" style="background-image: url('https://img-home.csdnimg.cn/images/20230131025301.png');">
<a class="btn-remove-reward"></a>
<div class="form-reward-box">
<div class="info">
成就一亿技术人!
</div>
<div class="price-info">
拼手气红包<span class="price">6.0元</span>
</div>
</div>
</div>
<div class="comment-operate-box">
<div class="comment-operate-l">
<span id="tip_comment" class="tip">还能输入<em>1000</em>个字符</span>
</div>
<div class="comment-operate-c">
&nbsp;
</div>
<div class="comment-operate-r">
<div class="comment-operate-item comment-reward">
<img class="comment-operate-img" data-url="https://csdnimg.cn/release/blogv2/dist/pc/img/" src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentReward.png" alt="红包">
<span class="comment-operate-tip">添加红包</span>
</div>
<div class="comment-operate-item comment-emoticon">
<img class="comment-operate-img" data-url="https://csdnimg.cn/release/blogv2/dist/pc/img/" src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentEmotionIcon.png" alt="表情包">
<span class="comment-operate-tip">插入表情</span>
<div class="comment-emoticon-box comment-operate-isshow">
<div class="comment-emoticon-img-box"></div>
</div>
</div>
<div class="comment-operate-item comment-code">
<img class="comment-operate-img" data-url="https://csdnimg.cn/release/blogv2/dist/pc/img/" src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentCodeIcon.png" alt="表情包">
<span class="comment-operate-tip">代码片</span>
<div class="comment-code-box comment-operate-isshow">
<ul id="commentCode">
<li><a data-code="html">HTML/XML</a></li>
<li><a data-code="objc">objective-c</a></li>
<li><a data-code="ruby">Ruby</a></li>
<li><a data-code="php">PHP</a></li>
<li><a data-code="csharp">C</a></li>
<li><a data-code="cpp">C++</a></li>
<li><a data-code="javascript">JavaScript</a></li>
<li><a data-code="python">Python</a></li>
<li><a data-code="java">Java</a></li>
<li><a data-code="css">CSS</a></li>
<li><a data-code="sql">SQL</a></li>
<li><a data-code="plain">其它</a></li>
</ul>
</div>
</div>
<div class="comment-operate-item">
<input type="hidden" id="comment_replyId" name="comment_replyId">
<input type="hidden" id="article_id" name="article_id" value="142754373">
<input type="hidden" id="comment_userId" name="comment_userId" value="">
<input type="hidden" id="commentId" name="commentId" value="">
<a data-report-click='{"mod":"1582594662_003","spm":"1001.2101.3001.4227","ab":"new"}'>
<input type="submit" class="btn-comment btn-comment-input" value="评论">
</a>
</div>
</div>
</div>
</form>
</div>
<div class="comment-list-container">
<div class="comment-list-box comment-operate-item">
</div>
<div id="lookFlodComment" class="look-flod-comment">
<span class="count"></span>&nbsp;条评论被折叠&nbsp;<a class="look-more-flodcomment">查看</a>
</div>
<div class="opt-box text-center">
<div class="btn btn-sm btn-link-blue" id="btnMoreComment"></div>
</div>
</div>
</div>
<div id="pcFlodCommentSideBox" class="pc-flodcomment-sidebox">
<div class="comment-fold-tit"><span id="lookUnFlodComment" class="back"><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentArrowLeftWhite.png" alt=""></span>被折叠的&nbsp;<span class="count"></span>&nbsp;条评论
<a href="https://blogdev.blog.csdn.net/article/details/122245662" class="tip" target="_blank">为什么被折叠?</a>
<a href="https://bbs.csdn.net/forums/FreeZone" class="park" target="_blank">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/iconPark.png">到【灌水乐园】发言</a>
</div>
<div class="comment-fold-content"></div>
<div id="lookBadComment" class="look-bad-comment side-look-comment">
<a class="look-more-comment">查看更多评论<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/commentArrowDownWhite.png" alt=""></a>
</div>
</div>
</div>
<div class="comment-rewarddialog-box">
<div class="form-box">
<div class="title-box">
添加红包
<a class="btn-form-close"></a>
</div>
<form id="commentRewardForm">
<div class="ipt-box">
<label for="txtName">祝福语</label>
<div class="ipt-btn-box">
<input type="text" name="name" id="txtName" autocomplete="off" maxlength="50">
<a class="btn-ipt btn-random"></a>
</div>
<p class="notice">请填写红包祝福语或标题</p>
</div>
<div class="ipt-box">
<label for="txtSendAmount">红包数量</label>
<div class="ipt-txt-box">
<input type="text" name="sendAmount" maxlength="4" id="txtSendAmount" placeholder="请填写红包数量(最小10个)" autocomplete="off">
<span class="after-txt"></span>
</div>
<p class="notice">红包个数最小为10个</p>
</div>
<div class="ipt-box">
<label for="txtMoney">红包总金额</label>
<div class="ipt-txt-box error">
<input type="text" name="money" maxlength="5" id="txtMoney" placeholder="请填写总金额(最低5元)" autocomplete="off">
<span class="after-txt"></span>
</div>
<p class="notice">红包金额最低5元</p>
</div>
<div class="balance-info-box">
<label>余额支付</label>
<div class="balance-info">
当前余额<span class="balance">3.43</span>
<a href="https://i.csdn.net/#/wallet/balance/recharge" class="link-charge" target="_blank">前往充值 ></a>
</div>
</div>
<div class="opt-box">
<div class="pay-info">
需支付:<span class="price">10.00</span>
</div>
<button type="button" class="ml-auto btn-cancel">取消</button>
<button type="button" class="ml8 btn-submit" disabled="true">确定</button>
</div>
</form>
</div>
</div>
<div class="rr-guide-box">
<div class="rr-first-box">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/guideRedReward02.png" alt="">
<button class="btn-guide-known next">下一步</button>
</div>
<div class="rr-second-box">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/guideRedReward03.png" alt="">
<button class="btn-guide-known known">知道了</button>
</div>
</div>
</div>
<div class="redEnvolope" id="redEnvolope">
<div class="env-box">
<div class="env-container">
<div class="pre-open" id="preOpen">
<div class="top">
<header>
<img class="clearTpaErr" :src="redpacketAuthor.avatar" alt="" />
<div class="author">成就一亿技术人!</div>
</header>
<div class="bot-icon"></div>
</div>
<footer>
<div class="red-openbtn open-start"></div>
<div class="tip">
领取后你会自动成为博主和红包主的粉丝
<a class="rule" target="_blank">规则</a>
</div>
</footer>
</div>
<div class="opened" id="opened">
<div class="bot-icon">
<header>
<a class="creatorUrl" href="" target="_blank">
<img class="clearTpaErr" src="https://profile-avatar.csdnimg.cn/default.jpg!2" alt="" />
</a>
<div class="author">
<div class="tt">hope_wisdom</div> 发出的红包
</div>
</header>
</div>
<div class="receive-box">
<header></header>
<div class="receive-list">
</div>
</div>
</div>
</div>
<div class="close-btn"></div>
</div>
</div>
<div id="rewardNew" class="reward-popupbox-new">
<p class="rewad-title">打赏作者<span class="reward-close"><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/closeBt.png"></span></p>
<dl class="profile-box">
<dd>
<a href="https://blog.csdn.net/weixin_43700915" data-report-click='{"mod":"popu_379","dest":"https://blog.csdn.net/weixin_43700915","ab":"new"}'>
<img src="https://profile-avatar.csdnimg.cn/6505fd474db340f5b8e8cb2c8b008465_weixin_43700915.jpg!1" class="avatar_pic">
</a>
</dd>
<dt>
<p class="blog-name">Cesium进阶学习</p>
<p class="blog-discript">你的鼓励将是我创作的最大动力</p>
</dt>
</dl>
<div class="reward-box-new">
<div class="reward-content"><div class="reward-right"></div></div>
</div>
<div class="money-box">
<span class="choose-money choosed" data-id="1">¥1</span>
<span class="choose-money " data-id="2">¥2</span>
<span class="choose-money " data-id="4">¥4</span>
<span class="choose-money " data-id="6">¥6</span>
<span class="choose-money " data-id="10">¥10</span>
<span class="choose-money " data-id="20">¥20</span>
</div>
<div class="sure-box">
<div class="sure-box-money">
<div class="code-box">
<div class="code-num-box">
<span class="code-name">扫码支付:</span><span class="code-num">¥1</span>
</div>
<div class="code-img-box">
<div class="renovate">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/pay-time-out.png">
<span>获取中</span>
</div>
</div>
<div class="code-pay-box">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/newWeiXin.png" alt="">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/newZhiFuBao.png" alt="">
<span>扫码支付</span>
</div>
</div>
</div>
<div class="sure-box-blance">
<p class="tip">您的余额不足,请更换扫码支付或<a target="_blank" data-report-click='{"mod":"1597646289_003","spm":"1001.2101.3001.4302"}' href="https://i.csdn.net/#/wallet/balance/recharge?utm_source=RewardVip" class="go-invest">充值</a></p>
<p class="is-have-money"><a class="reward-sure">打赏作者</a></p>
</div>
</div>
</div>
<div class="pay-code">
<div class="pay-money">实付<span class="pay-money-span" data-nowprice='' data-oldprice=''></span></div>
<div class="content-blance"><a class="blance-bt" href="javascript:;">使用余额支付</a></div>
<div class="content-code">
<div id="payCode" data-id="">
<div class="renovate">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/pay-time-out.png">
<span>点击重新获取</span>
</div>
</div>
<div class="pay-style"><span><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/weixin.png"></span><span><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/zhifubao.png"></span><span><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/jingdong.png"></span><span class="text">扫码支付</span></div>
</div>
<div class="bt-close">
<svg t="1567152543821" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10924" xmlns:xlink="http://www.w3.org/1999/xlink" width="12" height="12">
<defs>
<style type="text/css"></style>
</defs>
<path d="M512 438.378667L806.506667 143.893333a52.032 52.032 0 1 1 73.6 73.621334L585.621333 512l294.485334 294.485333a52.074667 52.074667 0 0 1-73.6 73.642667L512 585.621333 217.514667 880.128a52.053333 52.053333 0 1 1-73.621334-73.642667L438.378667 512 143.893333 217.514667a52.053333 52.053333 0 1 1 73.621334-73.621334L512 438.378667z" fill="" p-id="10925"></path>
</svg>
</div>
<div class="pay-balance">
<input type="radio" class="pay-code-radio" data-type="details">
<span class="span">钱包余额</span>
<span class="balance" style="color:#FC5531;font-size:14px;">0</span>
<div class="pay-code-tile">
<img src="https://csdnimg.cn/release/blogv2/dist/pc/img/pay-help.png" alt="">
<div class="pay-code-content">
<div class="span">
<p class="title">抵扣说明:</p>
<p> 1.余额是钱包充值的虚拟货币按照1:1的比例进行支付金额的抵扣。<br> 2.余额无法直接购买下载可以购买VIP、付费专栏及课程。</p>
</div>
</div>
</div>
</div>
<a class="pay-balance-con" href="https://i.csdn.net/#/wallet/balance/recharge" target="_blank"><img src="https://csdnimg.cn/release/blogv2/dist/pc/img/recharge.png" alt=""><span>余额充值</span></a>
</div>
<div class="keyword-dec-box" id="keywordDecBox"></div>
</body>
<link rel="stylesheet" href="https://g.csdnimg.cn/lib/cboxEditor/1.1.6/embed-editor.min.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/blog_editor_html/release1.6.12/ckeditor/plugins/codesnippet/lib/highlight/styles/atom-one-light.css">
</html>