簡體   English   中英

OpenGL幀緩沖離屏渲染

[英]OpenGL Framebuffer Offscreen Rendering

我正在使用GLEW在MinGW Windows Code :: Blocks 12.11上執行SDL / OpenGL項目。 我正在嘗試實現2D屏幕外渲染,以便最終可以嘗試一些片段着色器效果。

這是渲染到默認幀緩沖區的場景:

場景正常

但是,如果將場景渲染為幀緩沖區對象的紋理(稱為fbo_texture),然后嘗試將其渲染為全屏四邊形,則會得到以下信息:

帶幀緩沖對象的場景

圖像顯示為翻轉,鏡像和綠色。 我非常確定幀緩沖區的渲染工作正常,但是對於我一生來說,我無法弄清楚紋理為何如此偏斜。

這是我在調用glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0)之后嘗試將fbo_texture渲染為帶紋理的四邊形的方法。 程序初始化時,我正在使用glMatrixMode(GL_MODELVIEW)和glOrtho(0,screen_width,screen_height,0,0,1)。 Screen_width是400,screen_height是400。

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, fbo_texture);
glBegin(GL_QUADS);
    x1= 0.5;
    x2= 400.5;
    y1= 0.5;
    y2 = 400.5;
    glTexCoord2f(0.0f, 0.0f); glVertex2f(x1, y1);
    glTexCoord2f(1.0f, 0.0f); glVertex2f(x2, y1);
    glTexCoord2f(0.0f, 1.0f); glVertex2f(x2, y2);
    glTexCoord2f(1.0f, 1.0f); glVertex2f(x1, y2);
glEnd();


glDisable(GL_TEXTURE_2D);

非常感謝您的幫助,如果我需要提供更多信息,請告訴我。

這可能不是您唯一的問題,但是從您顯示的部分來看,紋理坐標中交換了兩個頂點。 4個頂點中的第3個是右上角,坐標為(x2, y2) ,因此它應具有紋理坐標(1.0f, 1.0f)

glTexCoord2f(0.0f, 0.0f); glVertex2f(x1, y1);
glTexCoord2f(1.0f, 0.0f); glVertex2f(x2, y1);
glTexCoord2f(1.0f, 1.0f); glVertex2f(x2, y2);
glTexCoord2f(0.0f, 1.0f); glVertex2f(x1, y2);

您還說在glMatrixMode(GL_MODELVIEW)之后調用glOrtho() glMatrixMode(GL_MODELVIEW) glOrtho()設置投影矩陣,因此通常應在glMatrixMode(GL_PROJECTION)之后調用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM