是否可以简化此if语句?
如果是的话,答案是什么?
if (type)
{
if(NdotL >= 0.0)
{
color += Idiff + Ispec;
}
}
else
{
color += Idiff + Ispec;
}
答案 0 :(得分:6)
从布尔代数的角度考虑这个问题。你有两个条件
A = (type)
B = (NdotL >= 0.0 )
你在
时执行你的陈述A * B
/A
(我使用/A
表示“NOT A”,*
表示“AND”)
所以你唯一没有执行的是
A * /B
这意味着您的陈述应为
if (!((type) && NdotL < 0.0 )) {
// do your thing
}
或者,使用布尔标识
(A * B) = /(/A + /B)
你可以将你的条件重写为
( /A + B )
if ( !(type) || ( NdotL >= 0 ) ) {
// do your thing
}
答案 1 :(得分:5)
if (!type || NdotL >= 0.0)
{
color += Idiff + Ispec;
}
答案 2 :(得分:1)
使用
if (type && NdotL > 0.0){
Blah....
} else {
Buegh...
}
只是为了结合这两个条件。
对于缩进等真的很抱歉,但是这个网站的移动版本不允许你输入代码,我只是想帮你这么多XD!
答案 3 :(得分:0)
试试:
color+=(type && NdotL >= 0.0)? Idiff + Ispec:Idiff + Ispec;