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

问题描述 投票:0回答:2

我需要在 GLSL 中获得

vec3
的最大值。目前我正在做

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

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

opengl glsl
2个回答
24
投票

不幸的是,这是你在 GLSL 中要做的最好的事情。

我已经习惯写这种东西了。但是,如果它困扰您,您可以随时编写自己的函数来实现这一点。

例如:

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

0
投票

对于

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

注意:我怀疑它会对当今的硬件产生任何影响,如果确实如此,优化器可能会为您重新排列代码。我有点怀念像这样的“代码高尔夫”是我工作的常规部分的时代。

© www.soinside.com 2019 - 2024. All rights reserved.