【发布时间】:2014-06-03 08:41:12
【问题描述】:
我在 glsl 片段着色器中做一些事情,并得到一些奇怪的结果。我用于计算的代码现在应该不是真正相关的,但是对于某种“调试”,我根据变量所在的范围显示颜色。
为此的编码是: (阴影是浮点数)
if(shadow == 0.0f)
{
vFragColor = vec4(1.0f, 0.0f, 0.0f, 0.0f);
}
else if(shadow == 1.0f)
{
vFragColor = vec4(0.0f, 1.0f, 0.0f, 0.0f);
}
else if(shadow < 1.0f && shadow > 0.0f)
{
vFragColor = vec4(0.0f, 0.0f, 1.0f, 0.0f);
}
else if(shadow < 0.0f)
{
vFragColor = vec4(1.0f, 0.0f, 1.0f, 0.0f);
}
else if(shadow > 1.0f)
{
vFragColor = vec4(0.0f, 1.0f, 1.0f, 0.0f);
}
else
{
vFragColor = vec4(1.0f, 1.0f, 1.0f, 0.0f);
}
据我了解,不应在末尾输入“else”,因为之前的代码会检查任何可能的值。 但发生的情况是,对于我得到一些奇怪结果的区域,我想做那种“调试”,代码进入“else”语句。
有人知道这是怎么发生的吗?这个我完全看不懂……
【问题讨论】:
-
从不比较浮点是否完全相等,而是查看两者之间的距离是否小于某个增量
-
@ratchetfreak 是的,我知道,但是 else if 语句涵盖了小于 0、正好 0、介于 0 和 1 之间、正好 1 和大于 1 的任何内容......所以 delta 与否,如何代码可以进入最后一个else语句吗?
-
如果 alpha 值为 0,你怎么知道它达到了最新的语句?它是完全透明的。
-
@nurgan:浮点数也可以是“非数字”。
-
@ratchetfreak 有时比较浮点数是否相等是不合适的,有时则不是。如果你决定“从不”来比较它们,你选择了愚昧迷信的道路,这对你来说可能很好,但为什么这对别人来说是正确的选择呢?
标签: opengl floating-point glsl