【问题标题】:Shader not drawing black with no light?着色器在没有光的情况下不绘制黑色?
【发布时间】:2017-06-28 06:48:13
【问题描述】:

我正在尝试使用从灰度、一维纹理中采样的值作为乘法项来实现镜面反射。

我已经实现了一个切换,所以我可以看到两者之间的区别,但由于某种原因,当启用采样颜色时,没有灯光的场景区域显示为浅灰色,而没有采样的区域相同区域显示为黑色。

这是为什么?这是我设置片段颜色的区域。

if(u_specularRamp == 1)
{
    specularAmount = clamp(specularAmount, 0.0, 1.0);
    vec2 texCoords = vec2(specularAmount, 0.5);
    vec4 sampledColor = texture(u_ramp_tex, texCoords);
    specularReflection = vec3(0.3 * sampledColor.x);
}
else
{
    specularReflection = vec3(0.3 * specularAmount);
}

FragColor = vec4(specularReflection, 1.0);

u_specularRamp 是我传入的整数制服,用于打开和关闭采样颜色。

【问题讨论】:

  • FragColor = vec4(specularReflection, 1.0); - 只写高光颜色作为输出是否有意?
  • 显然这取决于您采样的纹理。显然纹理在左边缘不是黑色的。
  • @Matso 是的,这是为了让我更容易看到发生了什么。这应该在没有镜面高光的地方输出黑色,它会输出黑色,除非我从纹理中采样。
  • @NicoSchertler 纹理在左边缘是黑色的,但即使不是,不受光线影响的区域也应该输出为纯黑色,当我'不是从纹理中采样。由于我只是输出高光,这些区域应该输出为纯黑色,但它们不是。
  • @JacksonRushing 你能把它作为答案发布吗?

标签: opengl glsl shader


【解决方案1】:

我已经解决了这个问题,万一有人遇到这个问题,这个行为是由纹理参数设置为 GL_REPEAT 引起的。如果您想在没有任何光线的地方使用黑色,请将该参数设置为 GL_CLAMP_TO_EDGE

【讨论】:

    猜你喜欢
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多