将cg中的矢量比较转换为glsl
我无法将cg着色器转换为glsl 在cg中,有一行:将cg中的矢量比较转换为glsl,glsl,shader,Glsl,Shader,我无法将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
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中转换的建议?谢谢:假设Cg比较代码实质上是将这些操作中的每一个广播到向量的4个分量,GLSL没有简单的内置方法来处理它。但它确实有办法做到这一点 现代GLSL ie:texture2D早就被丢弃的版本可以访问组件级比较函数,这些函数受您的条件影响。它们生成布尔向量,表示相应的组件是否满足条件 然后可以使用mix函数进行组件选择。但是,您必须手动执行整数广播才能使其正常工作 因此,等效的GLSL代码为:
mix(vec4(2.0), vec4(1.0), greaterThan(dst, vec4(0.5)));
是的,mix中的值顺序是向后的:为不大于第一个的错误条件取的值;真正的情况是第二种情况