FBO结果没有画到屏幕上

我最近添加了framebuffer渲染到我的游戏和渲染到FBO的作品(用glGetTexImagevalidation),但是当我去渲染一个四边形来显示结果什么也没有画到屏幕上。 我使用的是OpenGL 3.3 Core,所以我使用四边形的顶点缓冲区进行绘制,并使用两个简单的直通着色器来显示四边形。 我对后面的代码量感到抱歉,但是我觉得这对所有最终看这个的人来说都是必要的。

四代:

// create vertices // Vertex(position, normal, tex coord) quadVertices.Add( Vertex( Vector3( -1.0f, 1.0f, 0.0f ), Vector3(), Vector2( 0.0f, 1.0f ) ) ); quadVertices.Add( Vertex( Vector3( -1.0f, -1.0f, 0.0f ), Vector3(), Vector2( 0.0f, 0.0f ) ) ); quadVertices.Add( Vertex( Vector3( 1.0f, -1.0f, 0.0f ), Vector3(), Vector2( 1.0f, 0.0f ) ) ); quadVertices.Add( Vertex( Vector3( 1.0f, 1.0f, 0.0f ), Vector3(), Vector2( 1.0f, 1.0f ) ) ); quadVertices.SendData(); // gl*Buffer* methods wrapper // create indices (quadIndices is a buffer of 16-bit integers) quadIndices.Add( 0 ); quadIndices.Add( 1 ); quadIndices.Add( 2 ); quadIndices.Add( 0 ); quadIndices.Add( 2 ); quadIndices.Add( 3 ); quadIndices.SendData(); 

四色渲染:

 glDisable( GL_DEPTH_TEST ); glDisable( GL_CULL_FACE ); // bind the texture glActiveTexture( GL_TEXTURE0 ); glBindTexture( GL_TEXTURE_2D, framebuffer.GetColorHandle() ); _shader.Seti( "texture0", 0 ); // projection matrix is glm::ortho( -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f ); _shader.Set( "proj", _projection ); // get attributes int vertex = _shader.GetAttribLoc( "vertex" ); int texCoord = _shader.GetAttribLoc( "texCoordV" ); // bind buffers quadVertices.Bind(); quadIndices.Bind(); // enable arrays and point to data glEnableVertexAttribArray( vertex ); glVertexAttribPointer ( vertex, 3, GL_FLOAT, GL_FALSE, sizeof( Vertex ), (void*)( 0 ) ); glEnableVertexAttribArray( texCoord ); glVertexAttribPointer ( texCoord, 2, GL_FLOAT, GL_FALSE, sizeof( Vertex ), (void*)( sizeof( Vector3 ) * 2 ) ); // draw! glDrawElements( GL_TRIANGLES, quadIndices.Size(), GL_UNSIGNED_SHORT, 0 ); // disable arrays glDisableVertexAttribArray( vertex ); glDisableVertexAttribArray( texCoord ); // unbind everything quadVertices.Unbind(); quadIndices.Unbind(); glBindTexture( GL_TEXTURE_2D, 0 ); glEnable( GL_CULL_FACE ); glEnable( GL_DEPTH_TEST ); 

顶点着色器:

 #version 330 core in vec3 vertex; in vec2 texCoordV; out vec2 texCoordF; uniform mat4 proj; void main() { texCoordF = texCoordV; gl_Position = proj * vec4( vertex, 1.0 ); } 

片段着色器:

 #version 330 core layout(location=0) out vec4 fragColor; in vec2 texCoordF; uniform sampler2D texture0; void main() { fragColor = texture( texture0, texCoordF ); } 

Solutions Collecting From Web of "FBO结果没有画到屏幕上"

也许投影matrix是错误的,但这不应该。 渲染全屏四合一时,可以完全放弃投影。

基本上你的顶点着色器应该是:

 #version 330 core in vec3 vertex; in vec2 texCoordV; out vec2 texCoordF; void main() { texCoordF = texCoordV; gl_Position = vec4(vertex, 1.0); } 

重要的是你提交设备坐标的顶点(从[-1,-1]到[1,1]),但是你已经这样做了。