【问题标题】:convert comparison of vectors in cg to glsl将 cg 中向量的比较转换为 glsl
【发布时间】:2018-06-18 00:07:09
【问题描述】:

我在将 cg 着色器转换为 glsl 时遇到问题。

在cg中有一行:

float4 dst = tex2D(DST, i.uv);
float4 outputColor = (dst > 0.5 ? 1.0 : 2.0);

当我将其转换为 glsl 时:

vec4 dst = texture2D(DST, v_texCoord);
vec4 outputColor = (dst > 0.5 ? 1.0 : 2.0);

我遇到了错误:

'>' : comparison operator only defined for scalars

然后我尝试了:

vec4 outputColor = (dst > vec4(0.5) ? 1.0 : 2.0);

还是一样的错误.....

谁能给我一些关于如何在 glsl 中转换它的建议?谢谢:)

【问题讨论】:

    标签: glsl shader


    【解决方案1】:

    假设 Cg 比较代码本质上是将这些操作中的每一个广播到向量的 4 个组件,GLSL 没有简单的内置方法来处理它。但它确实有一种方法来做到这一点。

    现代 GLSL(即:texture2D 早已被废弃的版本)可以访问对您的条件有影响的组件比较函数。它们生成布尔向量,表示相应的组件是否满足条件。

    然后您可以使用mix 函数进行组件选择。但是,您必须手动进行整数广播才能完成这项工作。

    因此等效的 GLSL 代码将是:

    mix(vec4(2.0), vec4(1.0), greaterThan(dst, vec4(0.5)));
    

    是的,mix 中值的顺序是“向后”:为假条件(不大于)取的值是第一个;真正的条件是第二个。

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 2021-04-29
      • 1970-01-01
      • 2012-10-04
      相关资源
      最近更新 更多