最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

cocos2dx離屏渲染

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 07:56:19
文檔

cocos2dx離屏渲染

cocos2dx離屏渲染:今天才發(fā)現(xiàn) cocos2dx 有一個(gè)類叫做 CCRenderTexture,封裝了 opengl render to texture 的 細(xì)節(jié)。 這個(gè)類的是采用 FBO ,把圖像渲染到 自己新建的 frame buffer 來實(shí)現(xiàn)的。 如果寫一個(gè) shader ,比如讓圖像變成灰色,如果只給一個(gè) CCSprite
推薦度:
導(dǎo)讀cocos2dx離屏渲染:今天才發(fā)現(xiàn) cocos2dx 有一個(gè)類叫做 CCRenderTexture,封裝了 opengl render to texture 的 細(xì)節(jié)。 這個(gè)類的是采用 FBO ,把圖像渲染到 自己新建的 frame buffer 來實(shí)現(xiàn)的。 如果寫一個(gè) shader ,比如讓圖像變成灰色,如果只給一個(gè) CCSprite

今天才發(fā)現(xiàn) cocos2dx 有一個(gè)類叫做 CCRenderTexture,封裝了 opengl render to texture 的 細(xì)節(jié)。 這個(gè)類的是采用 FBO ,把圖像渲染到 自己新建的 frame buffer 來實(shí)現(xiàn)的。 如果寫一個(gè) shader ,比如讓圖像變成灰色,如果只給一個(gè) CCSprite setShaderProgram()

今天才發(fā)現(xiàn) cocos2dx 有一個(gè)類叫做 CCRenderTexture,封裝了 opengl render to texture 的 細(xì)節(jié)。

這個(gè)類的是采用 FBO ,把圖像渲染到 自己新建的 frame buffer 來實(shí)現(xiàn)的。


如果寫一個(gè) shader ,比如讓圖像變成灰色,如果只給一個(gè) CCSprite setShaderProgram()的話,只能讓單獨(dú)的 Sprite 變成灰色,

但是如果想讓整個(gè)游戲場景變成灰色,或者讓其中一部分變成灰色,就需要使用 FBO 離屏渲染技術(shù),把一些渲染的內(nèi)容放到一個(gè) FBO上,

然后繪制完成后,再放回到 最終的 frame buffer 中。


cocos2dx 封裝了這些操作,具體用法是

1.實(shí)例化一個(gè) CCRenderTexture* m_pRtt;

2.初始化時(shí)候,設(shè)置它的大小 m_pRtt = CCRenderTexture::create( width,height );

3.在 m_pRtt->begin() 和 m_pRtt->end() 之間,執(zhí)行 opengl 繪制指令。

比如在當(dāng)前場景的 update() 中,這樣寫:

m_pRtt->begin();

this->visit();

m_pRtt->end();

這樣整個(gè)場景就繪制到了 m_pRtt 這個(gè) RenderTexture 中

4. 如果需要給整個(gè)場景設(shè)置 shader ,則調(diào)用

m_pRtt->getSprite() ,給這個(gè) Sprite setShaderProgram()即可。


這樣,就可以實(shí)現(xiàn) 全屏高斯模糊 ,全屏變灰等 shader 的效果, 也可以用它實(shí)現(xiàn)屏幕截屏,保留上一幀圖像等功能。

今天參考了這篇文章,才了解到 CCRenderTexture 的用法的

http://www.cocoachina.com/bbs/read.php?tid=237495


自己欠缺的是對(duì) opengl FBO 真正的理解, 和對(duì) shader 算法知識(shí)匱乏。

如果知識(shí)應(yīng)用的話,利用這個(gè)方法,就可以在 cocos2dx 中寫出一些漂亮的效果了。


按照自己上面說的做法,在 cocos2dx 3.0里面, 一旦給 render texture 增加自己寫的 shader 后 ,出現(xiàn)了繪制不出來的情況。

暫時(shí)還不知道問題出在哪,初步感覺是自己寫的 fragment shader 是存在錯(cuò)誤的。。但是還沒查明錯(cuò)在哪里。

還是應(yīng)該多去學(xué)習(xí) opengl 底層知識(shí)才能解決這種 bug.

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

cocos2dx離屏渲染

cocos2dx離屏渲染:今天才發(fā)現(xiàn) cocos2dx 有一個(gè)類叫做 CCRenderTexture,封裝了 opengl render to texture 的 細(xì)節(jié)。 這個(gè)類的是采用 FBO ,把圖像渲染到 自己新建的 frame buffer 來實(shí)現(xiàn)的。 如果寫一個(gè) shader ,比如讓圖像變成灰色,如果只給一個(gè) CCSprite
推薦度:
標(biāo)簽: 發(fā)現(xiàn) 天才 渲染
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top