1. 程式人生 > >基於Qt的OpenGL程式設計(3.x以上GLSL可程式設計管線版)---(二十二)幀緩衝

基於Qt的OpenGL程式設計(3.x以上GLSL可程式設計管線版)---(二十二)幀緩衝

Vries的教程是我看過的最好的可程式設計管線OpenGL教程,沒有之一其原地址如下,https://learnopengl-cn.github.io/04%20Advanced%20OpenGL/05%20Framebuffers/關於幀緩衝的詳細知識瞭解請看原教程,本篇旨在對Vires基於visual studio平臺的程式設計思想與c++程式碼做純Qt平臺的移植,程式碼移植順序基本按照原教程順序,並附加一些學習心得,重在記錄自身學習之用

Tip: 這篇比較複雜,寫了兩份程式碼,第一份“FrameBuffers”是Vries程式碼的直接移植,使用的函式是glfw的原始OpenGL函式,與幀緩衝相關的程式碼有30行左右。第二份“FrameBuffers_QT”為使用Qt自己整合的幀緩衝相關程式碼,使用QOpenGLFrameBuffer類,只需要4行程式碼即可實現原始OpenGL函式的功能,但一些緩衝的細節問題無法復現。

程式原始碼連結:https://pan.baidu.com/s/1HXo3gWogSYDuqvERkNScjQ 提取碼:9ddq 

編譯環境:Qt5.9.4

編譯器:Desktop Qt5.9.4 MSVC2017 64bit

IDE:QtCreator

一,什麼是幀緩衝

  按照Vries的解釋,幀緩衝就是把3D視口的場景實時轉換為一張2D紋理,這樣解釋有些抽象,舉例說明。使用幀緩衝技術,還是在深度測試時用的場景,但切換為線框模式時,卻是一張四邊形紋理式樣

  而不是我們想象中的下圖這樣。

  這樣把3D場景轉換為一張紋理有什麼好處呢,Vries解釋道這樣可以非常方便的對場景做特效處理。恰逢筆者最近在學習OpenCV,可以對一張紋理做很多事情,這是類似的思想。只需要簡單修改片段著色器就可實現以下這些效果,當然這些改變都是實時的。