借助此link,我可以更改整个纹理的强度。现在,我要检测纹理上强度大于0.7的所有点。我该如何实现?
private void CreateShaders()
{
/***********Vert Shader********************/
vertShader = GL.CreateShader(ShaderType.VertexShader);
GL.ShaderSource(vertShader, @"
attribute vec3 a_position;
varying vec2 vTexCoord;
void main() {
vTexCoord = (a_position.xy + 1) / 2;
gl_Position = vec4(a_position,1);
}");
GL.CompileShader(vertShader);
/***********Frag Shader ****************/
fragShader = GL.CreateShader(ShaderType.FragmentShader);
GL.ShaderSource(fragShader, @"
precision highp float;
uniform sampler2D sTexture;
varying vec2 vTexCoord;
const float Epsilon = 1e-10;
//RGBtoHSV
//HSVtoRGB
void main ()
{
vec4 color = texture2D (sTexture, vTexCoord);
float u_saturate=0.7;
vec3 col_hsv = RGBtoHSV(color.rgb);
col_hsv.z *= (u_saturate * 2.0);
vec3 col_rgb = HSVtoRGB(col_hsv.rgb);
gl_FragColor = vec4(col_rgb.rgb, color.a);
}");
GL.CompileShader(fragShader);
}
答案 0 :(得分:0)
将强度与阈值进行比较,并根据强度使用不同的颜色:
gl_FragColor = intensity > 0.7 ? colorH : vec4(col_rgb.rgb, color.a);
片段着色器main
可能看起来像这样:
void main ()
{
vec4 color = texture2D (sTexture, vTexCoord);
float u_saturate=0.7;
vec3 col_hsv = RGBtoHSV(color.rgb);
float intensity = col_hsv.z;
col_hsv.z *= (u_saturate * 2.0);
vec3 col_rgb = HSVtoRGB(col_hsv.rgb);
vec4 colorH = vec4(0.0, 0.0, 0.0, 1.0);
gl_FragColor = intensity > 0.7 ? colorH : vec4(col_rgb.rgb, color.a);
}