從零開始寫引擎(OPENGL)(四)-後處理實現
其實這個感覺沒什麼好寫,比較簡單,就是喜聞樂見的應用了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