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符合我的对象的位置。我找不到错误在哪里。任何想法?
你能说明你是如何构建模型视图矩阵(即“模型”统一)? – IneQuation 2013-02-26 12:35:37