我需要在我的 GLSL 代码中多次调用这种函数。
vec2 minx(vec2 a, vec2 b) {
if (a.x < b.x) return a;
else return b;
}
Run Code Online (Sandbox Code Playgroud)
我担心过度分支。有没有办法避免 if-else 结构?
mixa根据[0.0, 1.0] 范围内的浮点插值值在 2 个值之间进行插值。如果a等于 0.0,则返回第一个值;如果a等于 1.0,则返回第二个值。
step测试某个值是否小于边缘值。如果小于则返回 0.0,否则返回 1.0。
如果您结合这两个函数,您的代码将如下所示:
vec2 minx(vec2 a, vec2 b)
{
return mix( a, b, step( b.x, a.x ) );
}
Run Code Online (Sandbox Code Playgroud)
请注意, 的结果step要么正好是 0.0,要么正好是 1.0,这导致mix要么返回第一个值,要么返回第二个值。