opengl 在GLSL中获取向量的分量最大值

t9eec4r0  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(142)

我需要在GLSL中获得vec3。目前我正在做

max(max(col.r, col.g),col.b)

它工作。但我想知道是否有一个更好的方法来做到这一点与一个内置的函数调用?

ux6nzvsh

ux6nzvsh1#

不幸的是,这是你在GLSL所能做的最好的事情。
我已经习惯写这种东西了。但是,如果它困扰你,你总是可以编写自己的函数来做到这一点。

例如:

float max3 (vec3 v) {
  return max (max (v.x, v.y), v.z);
}
eimct9ow

eimct9ow2#

对于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);

注意:我怀疑它在今天的硬件上会有什么不同,如果有,优化器可能会为你重新安排代码。我有点怀念像这样的“代码高尔夫”是我工作的一部分的时候。

相关问题