2013-02-26 30 views
0

我試圖在着色器中獲取片段世界位置。對於這一點,我創建了一個FBO,紋理綁定到它與格式GL_RGB32F並將其連接到GL_COLOR_ATTACHMENT0:獲取片段世界位置的問題

glGenFramebuffers(1,&fbo); 
glBindFramebuffer(GL_FRAMEBUFFER,fbo); 

glGenTextures(1,&texture); 
glBindTexture(GL_TEXTURE_2D,texture); 
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB32F,WINDOW_WIDTH,WINDOW_HEIGHT,0,GL_RGB,GL_FLOAT,NULL); 
glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,texture,0); 

的頂點和片段着色器看起來如下:

的Vertex Shader

#version 330 
layout(location = 0) in vec3 vertexposition; 

out vec4 position; 

uniform mat4 MVP; 
uniform mat4 Model; 

void main() 
{ 
    gl_Position = MVP*vec4(vertexposition,1.0f); 
    position = Model*vec4(vertexposition,1.0f); 
} 

片段着色器

#version 330 
in vec4 position; 

out vec3 outputPosition; 

void main() 
{ 
    outputPosition = position.xyz; 
} 

如果I'm權,outputPosition擁有的F由於頂點世界位置的內插,所以世界座標中的分段位置。

調用調用glDrawArrays後,我讀的顏色緩衝區,有這個片段世界的位置:

glReadBuffer(GL_COLOR_ATTACHMENT0); 
glReadPixels(0,0,WINDOW_WIDTH,WINDOW_HEIGHT,GL_RGB,GL_FLOAT,pixelInfo); 

但是當我畫這些點他們doesn't符合我的對象的位置。我找不到錯誤在哪裏。任何想法?

+0

你能說明你是如何構建模型視圖矩陣(即「模型」統一)? – IneQuation 2013-02-26 12:35:37

回答

0

我已經使用深度緩衝區解決了probem問題。錯誤的方式是我識別出繪製的像素。