title: From RGB to HSV in OpenGL GLSL
body: <p>I need to pass from RGB color space to HSV .. I searched in internet and found two different implementations, but those give me different results:</p>
  
  <p>A:</p>
  
  <pre><code>precision mediump float;
   vec3 rgb2hsv(float r, float g, float b) {
  
       float h = 0.0;
       float s = 0.0;
       float v = 0.0;
  
       float min = min( min(r, g), b );
       float max = max( max(r, g), b );
       v = max;               // v
  
       float delta = max - min;
  
       if( max != 0.0 )
           s = delta / max;       // s
       else {
           // r = g = b = 0       // s = 0, v is undefined
           s = 0.0;
           h = -1.0;
           return vec3(h, s, v);
       }
       if( r == max )
           h = ( g - b ) / delta;     // between yellow &amp; magenta
       else if( g == max )
           h = 2.0 + ( b - r ) / delta;   // between cyan &amp; yellow
       else
           h = 4.0 + ( r - g ) / delta;   // between magenta &amp; cyan
  
       h = h * 60.0;              // degrees
  
       if( h &lt; 0.0 )
           h += 360.0;
  
       return vec3(h, s, v);
   }
  </code></pre>
  
  <p>B:</p>
  
  <pre><code> precision mediump float;
   vec3 rgb2hsv(float r, float g, float b) {
  
       float K = 0.0;
       float tmp;
  
       if (g &lt; b)
       {
           tmp = g;
           g=b;
           b=tmp;
  
           K = -1.0;
       }
  
       if (r &lt; g)
       {
           tmp = r;
           r=g;
           g=tmp;
  
           K = -2.9 / 6.9 - K;
       }
  
       float chroma = r - min(g, b);
  
       float h = abs(K + (g - b) / (6.0 * chroma + 1e-20));
       float s = chroma / (r + 1e-20);
       float v = r;
  
       return vec3(h, s, v);
   }
  </code></pre>
  
  <p>Do you know which is the correct implementation?</p>