如何在 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;
现在,我的顶点着色器简单地缩放和偏置输入坐标以生成纹理坐标,通过顶点而不需要转换它们,也不需要我将纹理坐标与几何体一起传递,如下所示:
#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);
}
因此,纹理坐标输出为 *attrib_Fragment_Texture* 将从 0.0 变为 1.0,因为顶点坐标从 -1 变为 1。然而,使用以下着色器对此进行一点测试,似乎表明 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);
}
谁能发现我明显简单的错误/误解可能是什么?