[英]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);
}
似乎你的 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.