【发布时间】: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 你能把它作为答案发布吗?