cesium 后期處理

創(chuàng)建一個自定義postProcessStage后期處理的代碼如下


image.png

1,先實例化化一個PostProcessStages類死嗦,包含以下參數(shù)


image.png

(1)fragmentShader 自定義片元著色器
(2)uniforms 自定義uniform變量

(3)textureScale 紋理的縮放比例拣度,如果為1表示紋理尺寸等于視口大小
(4)forcePowerOfTwo紋理尺寸是否為2的倍數(shù)
(5)sampleMode 配置紋理的采樣方式
(6)pixelFormat 輸出紋理的像素格式默認RGBA
(7)pixelDatatype 輸出紋理的像素數(shù)據(jù)格式刻炒,默認無符號byte
(8)clearColor 輸出紋理的清除顏色
(9)scissorRectangle 裁剪測試的矩形范圍
(10)name 實例化后期處理的名稱耙旦,名稱不能重復朋蔫,否則會拋出錯誤

2测垛,更新posttProcessStage的過程
(1)先執(zhí)行CesiumWidget類的startRenderLoop方法


image.png

(2)接著調(diào)用Scene的render方法


image.png

(3)在render方法中調(diào)用 scene.updateAndExecuteCommands方法
image.png

(4)在updateAndExecuteCommands調(diào)用executeCommandsInViewport方法


image.png

(5)在executeCommandsInViewport方法中捏膨,調(diào)用updateAndClearFramebuffers更新和清除幀緩沖區(qū)


image.png

(6)updateAndClearFramebuffers調(diào)用postProcess.update更新postProces集合
image.png

(7)在PostProcessStageCollection.prototype.update方法中先更新默認加載的postProcessStage例如faxx抗鋸齒,bloom泛光等,然后更新自定義postProcessStage數(shù)組里的每項
image.png

(8)在PostProcessStage.prototype.update執(zhí)行創(chuàng)建選中圖元紋理号涯,創(chuàng)建uniform變量目胡,創(chuàng)建uniform紋理變量,創(chuàng)建渲染命令链快,配置采樣器誉己,獲取幀緩沖區(qū)等操作


image.png

(9)createSelectedTexture創(chuàng)建選中紋理
image.png

這個方法要實現(xiàn)的大致就是從被選中的features數(shù)組依次取出單個feature的被拾取顏色塞到ids Uint8Array數(shù)組中,然后創(chuàng)建一張紋理儲存ids數(shù)據(jù)
(10)createUniformMap方法的作用是將自定義的uniform變量和cesium提供默認的uniform進行合并


image.png

(11)updateUniformTextures 更新uniform紋理
(12)createDrawCommand 創(chuàng)建渲染命令


image.png

如果存在選中id紋理的話域蜗,會給片元著色器自動加上選中feature的方法“czm_selected”巨双,接著調(diào)用context.createViewportQuadCommand創(chuàng)建視口內(nèi)的渲染命令
(13)createSampler 配置采樣器
image.png

3,執(zhí)行posttProcessStage渲染命令

(1)在Scene render方法中更新和渲染primitive完成后會調(diào)用scene.resolveFramebuffers方法處理幀緩沖區(qū)


image.png

(2)在resolveFramebuffers方法內(nèi)部執(zhí)行postProces集合的渲染命令
image.png

(3)在PostProcessStageCollection.prototype.execute 中先渲染默認的postProcess然后再渲染自定義的postProcess
image.png

(4)在PostProcessStage.prototype.execute執(zhí)行渲染命令
image.png

(5)PostProcessStage的頂點著色器,后期處理的頂點著色器比較簡單霉祸,使用的是Context.prototype.createViewportQuadCommand默認的頂點著色器

#define OES_texture_float



#line 0

#line 0
attribute vec4 position;
attribute vec2 textureCoordinates;
varying vec2 v_textureCoordinates;
void main()
{
gl_Position = position;
v_textureCoordinates = textureCoordinates;
}

(6)PostProcessStage的片元著色器

    precision highp float;
#else
    precision mediump float;
    #define highp mediump
#endif

#define LOG_DEPTH
#define OES_texture_float_linear

#define OES_texture_float

uniform vec4 czm_viewport;
uniform float czm_pixelRatio;


#line 0

#line 0
uniform sampler2D colorTexture; 
varying vec2 v_textureCoordinates; 
const int KERNEL_WIDTH = 16; 
void main(void) 
{ 
    vec2 step = czm_pixelRatio / czm_viewport.zw; 
    vec2 integralPos = v_textureCoordinates - mod(v_textureCoordinates, 8.0 * step); 
    vec3 averageValue = vec3(0.0); 
    for (int i = 0; i < KERNEL_WIDTH; i++) 
    { 
        for (int j = 0; j < KERNEL_WIDTH; j++) 
        { 
            averageValue += texture2D(colorTexture, integralPos + step * vec2(i, j)).rgb; 
        } 
    } 
    averageValue /= float(KERNEL_WIDTH * KERNEL_WIDTH); 
    gl_FragColor = vec4(averageValue, 1.0); 
} 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筑累,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子丝蹭,更是在濱河造成了極大的恐慌慢宗,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奔穿,死亡現(xiàn)場離奇詭異镜沽,居然都是意外死亡,警方通過查閱死者的電腦和手機贱田,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門缅茉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人湘换,你說我怎么就攤上這事宾舅。” “怎么了彩倚?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵筹我,是天一觀的道長。 經(jīng)常有香客問我帆离,道長蔬蕊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任哥谷,我火速辦了婚禮岸夯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘们妥。我一直安慰自己猜扮,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布监婶。 她就那樣靜靜地躺著旅赢,像睡著了一般齿桃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上煮盼,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天短纵,我揣著相機與錄音,去河邊找鬼僵控。 笑死香到,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的报破。 我是一名探鬼主播悠就,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼充易!你這毒婦竟也來了理卑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蔽氨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后帆疟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹉究,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年踪宠,在試婚紗的時候發(fā)現(xiàn)自己被綠了自赔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡柳琢,死狀恐怖绍妨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柬脸,我是刑警寧澤他去,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站倒堕,受9級特大地震影響灾测,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜垦巴,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一媳搪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧骤宣,春花似錦秦爆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春精刷,著一層夾襖步出監(jiān)牢的瞬間拗胜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工怒允, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留埂软,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓纫事,卻偏偏與公主長得像勘畔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子丽惶,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容