從零開始寫引擎(OPENGL)(四)-後處理實現

https://www.zhihu.com/video/963208274439548928

其實這個感覺沒什麼好寫,比較簡單,就是喜聞樂見的應用了FBO和RTT而已。

創建一個FBO

glGenFramebuffers(1, &_fbo);

glBindFramebuffer(GL_FRAMEBUFFER, _fbo);

然後再創建一個Textue

glGenTextures(1, &_textureName);

glBindTexture(GL_TEXTURE_2D, _textureName);

當然至於纏繞模式,是否抗鋸齒的,就更具自己需要去選擇。

創建好後,把Textue掛在到FBO上。這裡其實思考了一段時間,究竟是用color buff好,還是Textue好,還是選擇Textue吧。

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

掛接完成好,好了開始後處理~然而。。。

OTL,這是什麼鬼?

經過一個下午的思考,才發現居然是缺少了個depth rbo.....

glGenRenderbuffers(1, &_rbo);

glBindRenderbuffer(GL_RENDERBUFFER, _rbo);

glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, _width, _height);

所以在這個時候,需要補充個和紋理解析度一樣的深度buff。

完成~

為了後期實現模型ui,封裝到了引擎的texture實現,使用起來也比較簡單

affterEffectTex->beginRender();

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

SLCameraManager::getInstance()->getMainCamera()->renderScene(*stack3d->modelViewMatrix, *stack3d->transformPipeline);

affterEffectTex->endRender();

OTL,真相儘快重構渲染底層,把一些東西清洗掉。。。

準備考研還是忍不住搞了一下。。。。。。。。還想搞蒙皮和畫畫,這是病。。。。。。得治


推薦閱讀:

[翻譯]DOOM(2016) - Graphic Study
[GDC16] Assassins Creed Syndicate: London Wasnt Built in a Day
伽馬校正小記
[Siggraph16] The devil is in the details: idTech 666

TAG:遊戲引擎 | 遊戲開發 | 手機遊戲開發 |