青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

孔雀開發(fā)小屋

專注并致力于手機(jī)客戶端開發(fā)
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統(tǒng)計

  • 隨筆 - 103
  • 文章 - 0
  • 評論 - 251
  • 引用 - 0

常用鏈接

留言簿(38)

隨筆分類

隨筆檔案

關(guān)注的博客

朋友的博客

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

OpenGL中FBO的概念及其應(yīng)用
FBO一個最常見的應(yīng)用就是:渲染到紋理(render to texture),通過這項(xiàng)技術(shù)可以實(shí)現(xiàn)發(fā)光效果,環(huán)境映射,陰影映射等很炫的效果。

OpenGL中的Frame Buffer Object(FBO)擴(kuò)展,被推薦用于把數(shù)據(jù)渲染到紋理對像。相對于其它同類技術(shù),如數(shù)據(jù)拷貝或交換緩沖區(qū)等,使用FBO技術(shù)會更高效并且更容易實(shí)現(xiàn)。

在OpenGL渲染管線中,幾何數(shù)據(jù)和紋理最終都是以2d像素繪制到屏幕上。最后一步的渲染目標(biāo)在OpenGL渲染管線中被稱為幀緩存(frame buffer)。幀緩存是顏色緩存、深度緩存、模板緩存、累積緩存的集合。默認(rèn)情況下, OpenGL使用的幀緩存是由窗體系統(tǒng)創(chuàng)建和管理的。

在OpenGL擴(kuò)展中,GL_EXT_framebuffer_object擴(kuò)展提供了一個創(chuàng)建額外幀緩存對象(FBO)的接口。這個幀緩存的創(chuàng)建和控制完全是由OpenGL完成的,有別于窗體系統(tǒng)創(chuàng)建的默認(rèn)的幀緩存。與系統(tǒng)默認(rèn)的幀緩存類似,一個FBO也是顏色緩存、深度緩存、模板緩存的集合(FBO不包括累積緩存),然后OpenGL程序就可以把渲染重定向到FBO中。

這里有一個新的概念需要注意,那就是renderbuffer object。這個對象是通過GL_EXT_framebuffer_object擴(kuò)展創(chuàng)建。它被用來在渲染過程中為一個2D圖像提供渲染目標(biāo)。

下圖展示了FBO和renderbuffer object與texture object之間的關(guān)系。從圖中我們可以看出:多個renderbuffer object和texture object可以通過掛接點(diǎn)掛接到FBO上。需要主要的是FBO并沒有實(shí)際存儲數(shù)據(jù)的地方,它只是一個數(shù)據(jù)的殼,它只有掛接點(diǎn)。



一個FBO對象包含多個顏色掛接點(diǎn)和一個深度掛接點(diǎn)以及一個模板掛接點(diǎn)。不同的顯卡支持的顏色掛接點(diǎn)的數(shù)目是不同的,可以通過查詢GL_MAX_COLOR_ATTACHMENTS_EXT獲取支持的最大的掛接點(diǎn)的數(shù)目。支持多個顏色掛接點(diǎn)的原因是FBO可以在同一時間內(nèi)將顏色緩存渲染到多個目標(biāo)中去,這種能力被稱為MRT(multiple render targets)。通過GL_ARB_draw_buffers擴(kuò)展可以實(shí)現(xiàn)該功能。

幀緩沖提供了一種有效的切換機(jī)制,使得掛接和卸載一個可掛接的圖像非常之迅速。FBO使用glFramebufferTexture2DEXT()來進(jìn)行texturebuffer對象的切換,使用glFramebufferRenderbufferEXT()來進(jìn)行renderbuffer對象的切換。

讓我們看一下其使用過程:
1.FBO對象的創(chuàng)建與銷毀
void glGenFramebuffersEXT(GLsizei n, GLuint* ids);
void glDeleteFramebuffersEXT(GLsizei n, const GLuint* ids);
第一個參數(shù)是要創(chuàng)建的FBO的個數(shù),第二個保存創(chuàng)建的FBO的ID。

2.一旦FBO對象創(chuàng)建完畢,即要進(jìn)行綁定
void glBindFramebufferEXT(GLenum target, GLuint id);
第一個參數(shù)必須是GL_FRAMEBUFFER_EXT
第二個參數(shù)是第一步創(chuàng)建FBO對象中獲取的id號,該id號是一個非0值,因?yàn)橄到y(tǒng)默認(rèn)的FBO的id號是0,所以如果你想取消FBO的綁定,將id等于0作為id參數(shù)傳遞給該函數(shù)即可。

3.創(chuàng)建Renderbuffer Object
void glGenRenderbuffersEXT(GLsizei n, GLuint* ids);
void glDeleteRenderbuffersEXT(GLsizei n, const GLuint* ids);

4.同樣的,Renderbuffer Object創(chuàng)建好之后,要記得綁定。
void glBindRenderbufferEXT(GLenum target, GLuint id)

5.確定Renderbuffer Object的數(shù)據(jù)格式和尺寸。
  這一步很重要,因?yàn)槲覀冎皇莿?chuàng)建了Renderbuffer Object,還沒有為它提供一個存儲數(shù)據(jù)的地方,也沒有指定其存儲數(shù)據(jù)的地方存儲什么格式的數(shù)據(jù),所以接下來就要做這個事情了。
void glRenderbufferStorageEXT(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height);
第一個參數(shù)必須是GL_RENDERBUFFER_EXT
第二個參數(shù)可以是可渲染的顏色格式,如(GL_RGB, GL_RGBA, etc.),可渲染的深度格式(GL_DEPTH_COMPONENT)或者是可渲染的模板格式(GL_STENCIL_INDEX)。
最后兩個參數(shù)就是以像素為單位指定數(shù)據(jù)所要占用內(nèi)存的大小。

這里需要注意兩點(diǎn):
1。 指定的內(nèi)存區(qū)域的寬和高應(yīng)該都小于GL_MAX_RENDERBUFFER_SIZE_EXT,否則將產(chǎn)生GL_INVALID_VALUE錯誤。
2。 所有的texture object也好,renderbuffer object也好,其寬和高都是嚴(yán)格一致的。

6.指定掛接的對象
glFramebufferTexture2DEXT函數(shù)掛接一個texture圖像到FBO
glFramebufferRenderbufferEXT函數(shù)掛接一個Renderbuffer圖像到FBO

7.檢測FBO狀態(tài)
該掛接的對象都掛接好了,在使用FBO之前,必須要檢查FBO的狀態(tài)是否處于完成狀態(tài)。如果FBO處于未完成狀態(tài),那么繪制操作就會失敗。如何獲取FBO的完成狀態(tài)呢?使用
glCheckFramebufferStatusEXT函數(shù)。

至此,關(guān)于FBO的概念及其使用就算告一段落了。下面給出一個完整的例子,該例子是從國外一個網(wǎng)站上找到的,代碼寫得簡單而漂亮,對FBO的演示也很完善。

FBO Demo

posted on 2010-08-26 04:33 孔雀 閱讀(15410) 評論(5)  編輯 收藏 引用 所屬分類: Graphics

評論

# re: OpenGL中FBO的概念及其應(yīng)用 2010-08-26 08:09 路青飛

有文字,還有圖片,更有demo下載。
我就喜歡這種類型的博客。
非常感謝孔雀的分享。
  回復(fù)  更多評論    

# re: OpenGL中FBO的概念及其應(yīng)用 2010-08-26 09:16 羅朝輝

文章有兩段文字重復(fù)了好幾遍哈。。。。
  回復(fù)  更多評論    

# re: OpenGL中FBO的概念及其應(yīng)用 2010-08-26 11:51 孔雀

@羅朝輝
謝謝.發(fā)博的時間太晚了,頭腦都有點(diǎn)不清醒了。重復(fù)的地方已刪除!
  回復(fù)  更多評論    

# re: OpenGL中FBO的概念及其應(yīng)用 2010-08-26 17:19 chaogu

demo效果不錯,就是blog寫得有點(diǎn)難懂.......
  回復(fù)  更多評論    

# re: OpenGL中FBO的概念及其應(yīng)用 2013-06-22 10:11 free snow

感謝 轉(zhuǎn)載了
  回復(fù)  更多評論    
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            中文欧美字幕免费| 91久久夜色精品国产网站| 亚洲午夜精品17c| 黄页网站一区| 亚洲视频观看| 国产色产综合产在线视频| 欧美大胆人体视频| 欧美—级在线免费片| 亚洲欧美制服另类日韩| 免费观看在线综合色| 日韩午夜一区| 欧美国产综合视频| 欧美成人xxx| 国语精品中文字幕| 老司机精品久久| 韩国三级电影一区二区| 亚洲免费在线视频一区 二区| 欧美精品1区| 欧美bbbxxxxx| 一区二区三区自拍| 免费成人高清在线视频| 欧美在线免费看| 欧美午夜视频| 亚洲美女黄网| 一区二区毛片| 国产精品久久二区二区| 亚洲黄色天堂| 91久久国产综合久久| 欧美一区二区三区四区高清 | 欧美国产大片| 久久九九全国免费精品观看| 国产一区二区精品久久91| 久久www成人_看片免费不卡| 久久久久久午夜| 在线观看福利一区| 亚洲欧美一区二区三区极速播放| 欧美一级一区| 亚洲第一页在线| 免费成人激情视频| 亚洲日本欧美天堂| 亚洲手机成人高清视频| 久久综合国产精品| 一本不卡影院| 欧美va亚洲va日韩∨a综合色| 国产精品乱码一区二三区小蝌蚪 | 欧美视频一区二区三区| 在线综合亚洲欧美在线视频| 亚洲欧洲美洲综合色网| 国产亚洲美州欧州综合国| 亚洲美女电影在线| 午夜日韩电影| 亚洲高清免费| 久久深夜福利| 欧美亚洲综合网| 亚洲视屏一区| 久久av一区二区三区| 亚洲国产精品一区在线观看不卡| 欧美影院久久久| 亚洲欧美综合网| 一级成人国产| 亚洲午夜女主播在线直播| 久久综合网色—综合色88| 久久电影一区| 麻豆freexxxx性91精品| 亚洲综合三区| 一本久久综合| 夜夜精品视频一区二区| 亚洲人体1000| 欧美激情精品久久久久久| 国产深夜精品| 国产精品乱码久久久久久| 欧美精品亚洲一区二区在线播放| 久久综合久久久| 一区二区欧美日韩视频| 欧美日韩国产限制| 一区二区三区免费在线观看| 亚洲裸体视频| 久久成人一区二区| 亚洲美女一区| 亚洲第一区色| 亚洲一区图片| 亚洲国产婷婷综合在线精品 | 亚洲香蕉视频| 99国产精品视频免费观看一公开 | av不卡在线观看| 久久婷婷麻豆| 国产精品美女在线| 亚洲欧美精品在线| 欧美一级视频| 久久夜色精品国产欧美乱| 欧美精品xxxxbbbb| 欧美涩涩网站| 国产欧美日韩不卡| 亚洲综合社区| 一区二区高清在线| 久久精视频免费在线久久完整在线看 | 欧美日韩美女一区二区| 精品成人免费| 狼狼综合久久久久综合网| 中日韩午夜理伦电影免费| 久久精品欧美日韩| 国产精品video| 亚洲激情二区| 另类欧美日韩国产在线| 亚洲一区999| 欧美中文字幕在线播放| 国产女优一区| 欧美自拍偷拍午夜视频| 亚洲国产精品va在线看黑人动漫| 久久久久综合一区二区三区| 国内外成人免费视频| 久久国产精品99精品国产| 99re视频这里只有精品| 欧美成人a视频| 亚洲国产日韩欧美综合久久| 欧美ed2k| 欧美色精品天天在线观看视频| 99精品福利视频| 亚洲欧洲精品一区二区精品久久久| 欧美在线视频播放| 国产在线欧美| 欧美国产激情| 久久视频国产精品免费视频在线| 亚洲乱码国产乱码精品精天堂| 亚洲男女自偷自拍| 久久精品男女| 亚洲大片免费看| 99ri日韩精品视频| 国产精品卡一卡二| 久久精品国产亚洲一区二区三区| 久久精品亚洲乱码伦伦中文| 欧美一区免费| 黄色小说综合网站| 午夜精品福利在线| 国产精品a久久久久| 另类av导航| 久久免费高清| 亚洲精品欧美日韩| 日韩午夜一区| 国产欧美在线视频| 亚洲人妖在线| 伊人久久男人天堂| 亚洲国产高清在线观看视频| 欧美国产精品日韩| 亚洲主播在线| 欧美本精品男人aⅴ天堂| 在线综合欧美| 亚洲私人影院| 亚洲精品少妇30p| 亚洲国产欧美日韩| 精品动漫3d一区二区三区免费版| 久久精品盗摄| 国产日韩欧美精品| 免费日韩成人| 国产日韩精品视频一区二区三区| 亚洲欧美一区二区三区在线| 久久久噜噜噜久久狠狠50岁| 一区二区高清在线| 欧美怡红院视频一区二区三区| 美日韩精品视频| 影音先锋日韩精品| 午夜伦理片一区| 亚洲视频中文字幕| 亚洲一区二区三区在线视频| 狠狠色丁香久久婷婷综合_中| 欧美影院在线播放| 亚洲欧美日韩国产一区二区| 国产精品白丝av嫩草影院| 亚洲国产经典视频| 曰韩精品一区二区| 欧美 日韩 国产一区二区在线视频| 久久人人看视频| 久久久av毛片精品| 国产精品五月天| 99re热这里只有精品免费视频| 国产精品99久久久久久有的能看| 国产精品久久午夜夜伦鲁鲁| 狠狠色伊人亚洲综合成人| 亚洲高清在线观看一区| 99视频在线观看一区三区| 韩国一区二区在线观看| 久久久无码精品亚洲日韩按摩| 一本色道久久99精品综合| 欧美成人精品激情在线观看| 欧美一区二区在线免费播放| 国产亚洲欧美一级| 午夜精品偷拍| 91久久精品www人人做人人爽| 韩日成人在线| 国产综合久久久久久鬼色| 国产精品久久久久av| 久久久噜噜噜久久狠狠50岁| 亚洲网址在线| 亚洲欧洲精品一区二区三区不卡 | 亚洲精品免费看| 国产精品久久福利| 欧美日本亚洲韩国国产| 欧美日本中文字幕| 久久在线免费观看| 老色鬼精品视频在线观看播放|