【发布时间】:2021-10-27 19:23:21
【问题描述】:
我在 glsl 中制作了一个示例代码,我正在使用 if(diffuse.rgb > vec3(1)),它给出了“无法比较向量或矩阵”错误。如果我这样做if(diffuse.rgb == vec3(1)) 它运行没有错误,谢谢。
【问题讨论】:
标签: if-statement glsl fragment-shader
我在 glsl 中制作了一个示例代码,我正在使用 if(diffuse.rgb > vec3(1)),它给出了“无法比较向量或矩阵”错误。如果我这样做if(diffuse.rgb == vec3(1)) 它运行没有错误,谢谢。
【问题讨论】:
标签: if-statement glsl fragment-shader
顺序比较和相等比较不是一回事。很容易理解向量等于/不等于另一个向量的含义。但是什么会导致一个向量“小于”另一个呢?你是在比较到空间零点的距离吗?您是否单独比较每个组件?如果是这样,如果某些组件较少而其他组件不少,会发生什么情况?
GLSL 有vector relational functions 来处理这些不同的情况。如果您要问的问题是“这些中的任何一个是否大于 1”,那么您可以使用 any(greaterThan(diffuse.rgb, vec3(1))) 来完成。如果你想问“所有这些都大于 1”,请使用all(greaterThan(diffuse.rgb, vec3(1)))。
【讨论】: