【问题标题】:Optional normal mapping in GLSLGLSL 中的可选法线映射
【发布时间】:2020-06-07 20:39:40
【问题描述】:

我试图弄清楚如何处理可能有或没有法线贴图的材质,如果没有,则告诉着色器使用顶点法线。现在的代码如下所示:

// retrieve the normal from the normal map
gNormal = texture(normalMap, uv);
gNormal = normalize(gNormal * 2.0 - 1.0);
gNormal = vec4(normalize(TBN * gNormal.xyz), 1.0);

// TODO: figure out a way to toggle normal mapping
//gNormal = vec4(normalize(normal), 1.0);

最常见的解决方案是程序生成着色器并即时切换,但这本身就是一个复杂的话题。除了传入uniform bool 之外,还有其他选择吗?

【问题讨论】:

    标签: opengl glsl shader normals


    【解决方案1】:

    另一种选择是始终使用法线贴图。最简单的法线贴图是具有 1 个法线向量的 1x1 纹理 - 例如 (0, 0, 1)。
    使用此解决方案,您不需要在着色器中进行分支。

    【讨论】:

    • 那意味着我不能使用顶点法线对吧?
    • @NicovanBentum 是的。地图的法线向量由TBN 转换。 TBN * vec3(0, 0, 1)TBN的z轴,也就是法向量(N)。
    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 2017-04-18
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 2012-09-07
    • 2014-05-17
    • 2017-05-08
    相关资源
    最近更新 更多