如何在GLSL着色器中插入纹理坐标?
我正在尝试将图像从屏幕尺寸下采样到原始尺寸的1/4。这是一个非常简单的过程,但似乎不正确。我有一个FBO,单色附件用作1/4屏幕尺寸的目标。
为了对纹理进行缩减采样,我有一个简单的全尺寸四边形我将要绘制,坐标如下:
v[0].v.position.x = -1.f; v[0].v.position.y = -1.f; v[0].v.position.z = 0.f;
v[1].v.position.x = -1.f; v[1].v.position.y = 1.f; v[1].v.position.z = 0.f;
v[2].v.position.x = 1.f; v[2].v.position.y = -1.f; v[2].v.position.z = 0.f;
v[3].v.position.x = 1.f; v[3].v.position.y = 1.f; v[3].v.position.z = 0.f;
现在,我的顶点着色器只是缩放和偏置输入坐标,以便生成纹理坐标,通过顶点而无需变换它们,也无需我使用几何体传递纹理坐标,如下所示: / p>
#version 420
layout(location = 0) in vec3 attrib_Position;
out vec2 attrib_Fragment_Texture;
void main()
{
attrib_Fragment_Texture = attrib_Position.xy * 0.5 + 0.5;
gl_Position = vec4(attrib_Position.xy, 0.0, 1.0);
}
因此,当顶点坐标从-1变为1时,纹理坐标输出为* attrib_Fragment_Texture *将从0.0变为1.0。然而,使用下面的着色器对此进行了一点测试,似乎显示了uv.x和uv。 y只从0.0到0.25。我希望它们从0.0到1.0进行插值!
#version 420
in vec2 attrib_Fragment_Texture;
out vec4 Out_Colour;
void main(void)
{
vec2 uv = attrib_Fragment_Texture.xy;
Out_Colour = vec4(uv.x, uv.y, 1.0, 1.0);
}
有人能发现我明显简单的错误/误解可能是什么吗?
答案 0 :(得分:1)
我怀疑你是使用原始视口渲染的,它是FBO大小的4倍,导致大部分原始视图被剪切。