簡體   English   中英

着色器翻轉 output 圖像

[英]Shader flips output image

我一直在努力找出背后的問題,為什么我的圖像有時會在着色器運行后最終翻轉,結果為 output。

我將 position 和普通圖像放入我的着色器中以執行基本的光照計算。 position 和正常圖像的方向正確,但生成的 output 似乎最終會翻轉。 這也發生在我的 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-buffer 法線,由此產生的光照通道 output 圖像最終翻轉: 在此處輸入圖像描述

在此處輸入圖像描述

似乎你的 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}},
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM