GLSL分量方面相等的比较

时间:2014-12-05 18:06:38

标签: opengl vector comparison glsl equals

我正在尝试检查纹理中的给定像素是白色,黑色还是两者都不是。我决定使用equal function described in the OpenGL 4 Reference Pages。我相信我只是在解决语法问题时遇到了问题。

我正在使用OpenGL 4.0.0版和OpenGL着色语言版本4.00。

以下是我的片段着色器代码的相关部分:

   //texture 1
   vec4 textureColor1 = texture(texUnit1, textureCoord);
   //texture 2
   vec4 textureColor2 = texture(texUnit2, textureCoord);
   //texture 3 (only contains black and white pixels)
   vec4 textureColor3 = texture(texUnit3, textureCoord);

   vec4 finalTextureColor;

   vec4 whiteColor = vec4(1.0, 1.0, 1.0, 0.0); //define white
   vec4 blackColor = vec4(0.0, 0.0, 0.0, 0.0); //define black

   if (bvec equal(textureColor3, whiteColor)){ //if texture 3 pixel is white
        finalTextureColor = textureColor1;
   } else if (bvec equal(textureColor3, blackColor)){  //if texture 3 pixel is black
        finalTextureColor = textureColor2;
   } else { //not black or white
        finalTextureColor = mix(textureColor1, textureColor2, 0.5);
   }

   color = finalTextureColor;

以下是我遇到的错误:

ERROR: 0:101: 'bvec' : undeclared identifier
ERROR: 0:101: 'equal' : syntax error syntax error

我知道我的纹理数据已正确传递到片段着色器,因为我可以说color = textureColor1color = textureColor2color = textureColor3,所有这些都会在3D对象上显示相应的纹理

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

bvecequal函数的返回类型。你得到一个布尔值向量来告诉你哪些组件​​是相同的。如果您只想比较整个颜色,请使用相等运算符==