예제 #1
0
        public static float[] ToHSV(Color3 color)
        {
            float val = Math.Max(Math.Max(color.R, color.G), color.B);

            if (Math.Abs(val) < 0.001f)
            {
                return new float[3] {
                           0, 0, 0
                }
            }
            ;

            float hue = Math.Min(Math.Min(color.R, color.G), color.B);
            float sat = (val - hue) / val;

            if (Math.Abs(sat) >= 0.001f)
            {
                Vector3 rgbN = val - new Vector3(color.R, color.G, color.B);

                rgbN /= (val - hue);

                if (color.R == val)
                {
                    hue = (color.G == hue) ? 5.0f + rgbN.Z : 1.0f - rgbN.Y;
                }
                else if (color.G == val)
                {
                    hue = (color.B == hue) ? 1.0f + rgbN.X : 3.0f - rgbN.Z;
                }
                else
                {
                    hue = (color.R == hue) ? 3.0f + rgbN.Y : 5.0f - rgbN.Z;
                }

                hue /= 6.0f;
            }

            return(new float[3] {
                hue, sat, val
            });
        }
예제 #2
0
 public static BrickColor FromColor3(Color3 color)
 {
     return(FromRGB(color.R, color.G, color.B));
 }
 public ColorSequence(Color3 c) : this(c, c)
 {
 }