我有float brightness
,其中包含2个向量的点数。大多数时候brightness
应该是肯定的,但要确保我使用max(brightness, 0.0)
。当我尝试在我的照明系统中使用brightness
时,显示屏上没有显示任何内容。我尝试用if语句调试它,但似乎它总是返回true或者其他东西。因此,if(brightness > 99999)
和if(brightness < 99999)
或if(brightness == 12345)
都会丢弃该像素。我正在使用GLSL版本430核心。
float brightness = dot(vector1, vector2);
brightness = max(brightness, 0.0);
if(brightness < -999) {
discard;
}
所以在这个例子中^它将丢弃像素。
答案 0 :(得分:0)
你很可能在vector1或vector2组件中有NaN(NaN =&gt;不是数字,如果在vector1或vector2计算期间存在除零,则会发生这种情况。)
请查看此方法以检测NaN: How to deal with NaN or inf in OpenGL ES 2.0 shaders
所以要解决这个问题,你需要看一下vector1&amp; vector2是计算出来的。
为了确认这是一个NaN问题,请使用vector1 / vector2的常量值,如:
// force values so we are sure dot will be 1.0
vector1 = vec3(1.0,0.0,0.0);
vector2 = vec3(1.0,1.0,0.0);
float brightness = dot(vector1, vector2);
brightness = max(brightness, 0.0);
// so this should never execute since dot is 1.0
if(brightness < -999) {
discard;
}
完全不可能使用上面的代码执行丢弃。 如果您认为这种情况仍然存在,那么只有其他可能的解释是if测试之后的代码将fragColor.rgb设置为black或fragColor.a为零,如果启用了混合,则不会显示像素。