【问题标题】:Problems getting fragment world position获取片段世界位置的问题
【发布时间】:2013-02-27 22:57:21
【问题描述】:

我正在尝试在着色器中获取片段世界位置。为此,我创建了一个 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);

顶点和片段着色器如下所示:

顶点着色器

#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;
}

如果我是对的,由于顶点世界位置的插值,outputPosition 具有世界坐标中的片段位置。

在调用 glDrawArrays 之后,我读取了颜色缓冲区,有这个片段世界位置:

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

但是当我绘制这些点时,它们与我的对象的位置不匹配。我找不到错误在哪里。有什么想法吗?

【问题讨论】:

  • 您能展示一下您是如何构建模型-视图矩阵的(即Model 制服)吗?

标签: opengl glsl


【解决方案1】:

我已经使用深度缓冲区解决了这个问题。错误在于我识别绘制的像素的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    相关资源
    最近更新 更多