我需要在 GLSL 中获得
vec3
的最大值。目前我正在做
max(max(col.r, col.g),col.b)
它有效。但我想知道是否有更好的方法通过一个内置函数调用来做到这一点?
不幸的是,这是你在 GLSL 中要做的最好的事情。
我已经习惯写这种东西了。但是,如果它困扰您,您可以随时编写自己的函数来实现这一点。
float max3 (vec3 v) {
return max (max (v.x, v.y), v.z);
}
对于
vec3
,您需要两次max
操作,对于vec4
,您不需要三个,两个就足够了:
vec2 maxPairs = max(v.xy, v.zw);
float maxValue = max(maxPairs.x, maxPairs.y);
它甚至可以扩展到找到最多两个
vec4
和三个 max
:
vec4 v = max(a, b);
vec2 maxPairs = max(v.xy, v.zw);
float maxValue = max(maxPairs .x, maxPairs.y);
注意:我怀疑它会对当今的硬件产生任何影响,如果确实如此,优化器可能会为您重新排列代码。我有点怀念像这样的“代码高尔夫”是我工作的常规部分的时代。