Opengl ES之FBO( 二 )

按照之前Opengl ES之紋理貼圖 一文所說的 , 在Opengl ES中進行紋理貼圖時直接以圖片的左上角為(0,0)原點進行貼圖,以糾正紋理貼圖倒置的問題,那么這次在綁定FBO之后之后我們就這么干,使用以下的頂點坐標和紋理坐標:
// 紋理坐標原點在圖片的左上角又是倒置的?什么鬼?疑惑吧?const static GLfloat FBO_VERTICES_AND_TEXTURE[] = {1.0f, -1.0f, // 右下// 紋理坐標1.0f,1.0f,1.0f, 1.0f, // 右上// 紋理坐標1.0f,0.0f,-1.0f, -1.0f, // 左下// 紋理坐標0.0f,1.0f,-1.0f, 1.0f, // 左上// 紋理坐標0.0f,0.0f};一運行,我們驚喜地發現,實際情況居然和 Opengl ES之紋理貼圖 一文所說的不一樣了,經過FBO后的貼圖再渲染到屏幕時,居然圖片是倒置的,如下圖:

Opengl ES之FBO

文章插圖
這是什么為什么呢?
默認情況下,OpenGL ES 通過繪制到窗口系統提供的幀緩沖區,也就是屏幕本身就是一個默認的FBO,而使用FBO進行紋理貼圖的時候需要以真正的紋理坐標(原點0,0在圖片的左下角)為基準進行貼圖 。因此如果直接使用屏幕進行紋理貼圖 , 其實是應該細分成兩個過程的,先以左下角為紋理坐標原點進行貼圖 , 然后將貼圖后的屏幕默認FBO旋轉繞X軸旋轉180度與屏幕坐標(左上角是坐標原點)重合,但是這兩個細分的過程可以做個取巧就是直接以左上角為紋理坐標原點進行貼圖,得到的結果是一樣的 。
但是我們在單獨使用FBO時,仍應該遵循以左下角為紋理坐標原點的原則進行紋理貼圖 。因此我們只需修改一下頂點坐標和紋理坐標,以左下角為紋理坐標作為原點進行FBO貼圖,然后再將FBO旋繞到屏幕上即可:
// 真正的紋理坐標在圖片的左下角const static GLfloat FBO_VERTICES_AND_TEXTURE[] = {1.0f, -1.0f, // 右下// 紋理坐標1.0f,0.0f,1.0f, 1.0f, // 右上// 紋理坐標1.0f,1.0f,-1.0f, -1.0f, // 左下// 紋理坐標0.0f,0.0f,-1.0f, 1.0f, // 左上// 紋理坐標0.0f,1.0f};運行結果如圖:
Opengl ES之FBO

文章插圖
往期系列Opengl ES之EGL環境搭建Opengl ES之著色器Opengl ES之三角形繪制Opengl ES之四邊形繪制Opengl ES之紋理貼圖Opengl ES之VBO和VAOOpengl ES之EBO
【Opengl ES之FBO】關注我 , 一起進步,人生不止coding?。。?
Opengl ES之FBO

文章插圖

推薦閱讀