着色器翻转输出图像

Shader flips output image

我一直在努力找出为什么我的图像有时会在着色器 运行 并输出结果后翻转的问题。

我将位置和法线图像输入到我的着色器中以执行基本的光照计算。位置和法线图像的方向正确,但生成的输出似乎最终会翻转。这也发生在我的 SSAO 通道中,SSAO 通道翻转图像,但 SSAO 的模糊通道随后将取消翻转图像恢复正常。

我用过

vec2(1.0 - uvCoords.x, uvCoords.y);

虽然这确实会将图像反转回正常状态,但它也会反转键盘输入和鼠标控制,因此不是理想的解决方案。

着色器输出到创建为的四边形:

std::vector<Vertex> Quad = {
//  pos                 // color            //texcoords
{{-1.0f, -1.0f, 0.0f}, {1.0f, 0.0f, 0.0f},  {1.0f, 0.0f}},
{{1.0f, -1.0f, 0.0f},  {0.0f, 1.0f, 0.0f},  {0.0f, 0.0f}},
{{1.0f, 1.0f, 0.0f},   {0.0f, 0.0f, 1.0f},  {0.0f, 1.0f}},
{{-1.0f, 1.0f, 0.0f},  {1.0f, 1.0f, 0.0f},  {1.0f, 1.0f}},
{{-1.0f, -1.0f, 0.0f}, {1.0f, 0.0f, 0.0f},  {1.0f, 0.0f}},
{{1.0f, 1.0f, 0.0f},   {0.0f, 0.0f, 1.0f},  {0.0f, 1.0f}},

};

光照通道着色器:

void main() {

    vec3 FragPos = texture(gPosition, uvCoords).rgb;
    vec3 Normal = texture(gNormal, uvCoords).rgb;

    float ambientValue = 0.1;
    vec3 ambient = ambientValue * light.LightColor.xyz;

    vec3 lightingDirection = normalize(light.LightPosition.xyz - FragPos);
    float diffCalc = max(dot(Normal, lightingDirection), 0.0);
    vec3 diffuse = diffCalc * light.LightColor.xyz;

    vec3 result = (ambient + diffuse) * light.ObjectColor.xyz;

    outColor = vec4(result, 1.0);

}

我正在以正确的方向显示 G 缓冲区法线以及最终翻转的最终照明通道输出图像:

你的 uv 坐标网格中的 x 轴似乎翻转了

std::vector<Vertex> Quad = {
    //  pos                 // color            //texcoords
   {{-1.0f, -1.0f, 0.0f}, {1.0f, 0.0f, 0.0f},  {1.0f, 0.0f}},
   {{1.0f, -1.0f, 0.0f},  {0.0f, 1.0f, 0.0f},  {0.0f, 0.0f}},
   {{1.0f, 1.0f, 0.0f},   {0.0f, 0.0f, 1.0f},  {0.0f, 1.0f}},
   {{-1.0f, 1.0f, 0.0f},  {1.0f, 1.0f, 0.0f},  {1.0f, 1.0f}},
   {{-1.0f, -1.0f, 0.0f}, {1.0f, 0.0f, 0.0f},  {1.0f, 0.0f}},
   {{1.0f, 1.0f, 0.0f},   {0.0f, 0.0f, 1.0f},  {0.0f, 1.0f}},
};

你可以看到 pos x = -1.0f 映射到 texcoord 1.0f,pos x 1.0f 映射到 0.0f,所以它确实翻转了 x 轴。

Layout should be 
std::vector<Vertex> Quad = {
    //  pos                 // color            //texcoords
   {{-1.0f, -1.0f, 0.0f}, {1.0f, 0.0f, 0.0f},  {0.0f, 0.0f}},
   {{1.0f, -1.0f, 0.0f},  {0.0f, 1.0f, 0.0f},  {1.0f, 0.0f}},
   {{1.0f, 1.0f, 0.0f},   {0.0f, 0.0f, 1.0f},  {1.0f, 1.0f}},
   {{-1.0f, 1.0f, 0.0f},  {1.0f, 1.0f, 0.0f},  {0.0f, 1.0f}},
   {{-1.0f, -1.0f, 0.0f}, {1.0f, 0.0f, 0.0f},  {0.0f, 0.0f}},
   {{1.0f, 1.0f, 0.0f},   {0.0f, 0.0f, 1.0f},  {1.0f, 1.0f}},
};