OpenGL 鏈?zhǔn)綖V鏡(幀緩沖離屏渲染)

一苦囱、鏈?zhǔn)綖V鏡概念

鏈?zhǔn)綖V鏡 通過幀緩沖離屏渲染技術(shù)實(shí)現(xiàn)特效的組合和疊加。通過多次draw最終實(shí)現(xiàn)預(yù)期效果脾猛。

二、渲染流程中的幀緩沖

OpenGL的工作流程鱼鸠,輸入像素?cái)?shù)據(jù)和頂點(diǎn)數(shù)據(jù)猛拴,兩種數(shù)據(jù)分別操作后,通過光柵化蚀狰,得到片段愉昆,再經(jīng)過片段處理,最后繪制到幀緩沖區(qū)麻蹋,最終轉(zhuǎn)化為像素?cái)?shù)據(jù)跛溉。OpenGL 管線渲染的最終目的地就是FrameBuffer(幀緩沖)。下面是OpenGL渲染流程圖扮授。

三芳室、幀緩沖對(duì)象

在OpenGL渲染管線中,幾何數(shù)據(jù)和紋理經(jīng)過多次轉(zhuǎn)化和多次測(cè)試刹勃,最后以二維像素的形式顯示在屏幕上堪侯。OpenGL管線的最終渲染目的地被稱作幀緩存(framebuffer)。幀緩沖是一些二維數(shù)組和OpenG所使用的存儲(chǔ)區(qū)的集合:顏色緩存荔仁、深度緩存伍宦、模板緩存和累計(jì)緩存芽死。一般情況下,幀緩存完全由window系統(tǒng)生成和管理次洼,由OpenGL使用关贵。這個(gè)默認(rèn)的幀緩存被稱作“window系統(tǒng)生成”(window-system-provided)的幀緩存。OpenGL允許我們定義我們自己的幀緩沖卖毁,也就是說我們能夠定義我們自己的顏色緩沖揖曾,甚至是深度緩沖和模板緩沖。在一個(gè)幀緩存對(duì)象中有多個(gè)顏色關(guān)聯(lián)點(diǎn)势篡、一個(gè)深度關(guān)聯(lián)點(diǎn)翩肌,和一個(gè)模板關(guān)聯(lián)。每個(gè)幀緩存中至少有一個(gè)顏色關(guān)聯(lián)點(diǎn)禁悠,其數(shù)目與實(shí)體顯卡相關(guān)念祭。可以通過GL_MAX_COLOR_ATTACHMENTS_EXT來查詢顏色關(guān)聯(lián)點(diǎn)的最大數(shù)目碍侦。

需要注意:FBO中并沒有存儲(chǔ)圖像粱坤,只有多個(gè)關(guān)聯(lián)點(diǎn)。

四瓷产、自定義幀緩沖

1:創(chuàng)建一個(gè)幀緩沖.

unsignedintfbo;glGenFramebuffers(1,&fbo);

2:綁定幀緩沖,幀緩沖會(huì)在被綁定時(shí)隱士開啟

glBindFramebuffer(GL_FRAMEBUFFER, fbo);

3:渲染到紋理

glGenTextures(1, &texture);glBindTexture(GL_TEXTURE_2D, texture);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 800, 600, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);

五站玄、渲染鏈條

多個(gè)特效組合結(jié)構(gòu)如下,綁定frame buffer 0 作用是再次激活默認(rèn)幀緩沖,在主窗口中有視覺效果濒旦。

1:灰度 fragment shaderGray

precision highp float; uniform sampler2D Texture;?

varying vec2 TextureCoordsVarying;?

const highp vec3 W = vec3(0.2125, 0.7154, 0.0721);

void main (void) {?

?vec4 mask = texture2D(Texture, TextureCoordsVarying);?

?floatluminance = dot(mask.rgb, W);?

?gl_FragColor = vec4(vec3(luminance), 1.0);?

}

1:上下顛倒 fragment shaderReverse

//setp two?

DrawWithGrayInShaderReverse(texture)

precision highp float;

uniform sampler2D Texture;

varying vec2 TextureCoordsVarying;

void main (void) {

? ? vec4 color = texture2D(Texture, vec2(TextureCoordsVarying.x, 1.0 - TextureCoordsVarying.y));

? ? gl_FragColor = color;

}

偽代碼如下:

// Step one

unsigned int fbo;

glGenFramebuffers(1, &fbo);

glBindFramebuffer(GL_FRAMEBUFFER, fbo);

unsigned int texture;

glGenTextures(1, &texture);

glBindTexture(GL_TEXTURE_2D, texture);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 800, 600, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);

DrawShaderGray(); //繪制結(jié)果在texture

//setp two?

DrawWithGrayInShaderReverse(texture)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末株旷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子尔邓,更是在濱河造成了極大的恐慌晾剖,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梯嗽,死亡現(xiàn)場(chǎng)離奇詭異齿尽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)灯节,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門循头,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人炎疆,你說我怎么就攤上這事卡骂。” “怎么了磷雇?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵偿警,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我唯笙,道長(zhǎng)螟蒸,這世上最難降的妖魔是什么盒使? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮七嫌,結(jié)果婚禮上少办,老公的妹妹穿的比我還像新娘。我一直安慰自己诵原,他們只是感情好英妓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绍赛,像睡著了一般蔓纠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吗蚌,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天腿倚,我揣著相機(jī)與錄音,去河邊找鬼蚯妇。 笑死敷燎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的箩言。 我是一名探鬼主播硬贯,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼陨收!你這毒婦竟也來了饭豹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤务漩,失蹤者是張志新(化名)和其女友劉穎墨状,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菲饼,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年列赎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宏悦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡包吝,死狀恐怖饼煞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诗越,我是刑警寧澤砖瞧,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站嚷狞,受9級(jí)特大地震影響块促,放射性物質(zhì)發(fā)生泄漏荣堰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一竭翠、第九天 我趴在偏房一處隱蔽的房頂上張望振坚。 院中可真熱鬧,春花似錦斋扰、人聲如沸渡八。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屎鳍。三九已至,卻和暖如春问裕,著一層夾襖步出監(jiān)牢的瞬間逮壁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工僻澎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留貌踏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓窟勃,卻偏偏與公主長(zhǎng)得像祖乳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秉氧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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

  • 前言 Google Play應(yīng)用市場(chǎng)對(duì)于應(yīng)用的targetSdkVersion有了更為嚴(yán)格的要求眷昆。從 2018 年...
    申國(guó)駿閱讀 64,077評(píng)論 14 98
  • """1.個(gè)性化消息: 將用戶的姓名存到一個(gè)變量中,并向該用戶顯示一條消息汁咏。顯示的消息應(yīng)非常簡(jiǎn)單亚斋,如“Hello ...
    她即我命閱讀 2,888評(píng)論 0 5
  • 我們都是軟弱的人,所以才會(huì)說謊攘滩。我們都是膽小的人帅刊,所以才要武裝。我們都是一群笨蛋漂问,所以才會(huì)互相傷害赖瞒。
    所羅門的偽證_dc0a閱讀 2,055評(píng)論 0 3
  • 為了讓我有一個(gè)更快速、更精彩蚤假、更輝煌的成長(zhǎng)栏饮,我將開始這段刻骨銘心的自我蛻變之旅!從今天開始磷仰,我將每天堅(jiān)持閱...
    李薇帆閱讀 1,712評(píng)論 0 2
  • 似乎最近一直都在路上袍嬉,每次出來走的時(shí)候感受都會(huì)很不一樣。 1灶平、感恩一直遇到好心人伺通,很幸運(yùn)箍土。在路上總是...
    時(shí)間里的花Lily閱讀 1,185評(píng)論 0 1