比较 3 个 glsl 向量

Bul*_*eme 4 if-statement glsl fragment-shader

我在 glsl 中制作了一个示例代码,我正在使用它if(diffuse.rgb > vec3(1)),它给出了“无法比较向量或矩阵”错误。如果我这样做,if(diffuse.rgb == vec3(1))它运行时不会出现错误,谢谢。

Nic*_*las 6

排序比较和相等比较不是一回事。很容易理解向量等于/不等于另一个向量的含义。但是什么会导致一个向量“小于”另一个向量呢?你是在比较距空间零点的距离吗?您是否单独比较每个组件?如果是这样,如果某些组件较少而其他组件不少于,会发生什么情况?

GLSL 具有向量关系函数来处理这些不同的情况。如果您想问的问题是“其中任何一个都大于 1”,那么您可以使用 来实现any(greaterThan(diffuse.rgb, vec3(1)))。如果您想问“所有这些都大于 1”,您可以使用all(greaterThan(diffuse.rgb, vec3(1)))