00001 /* 00002 File: Colour.h 00003 00004 Function: Definitions and classes for handling Colour 00005 00006 Author(s): Andrew Willmott 00007 00008 Copyright: (c) 1995-2000, Andrew Willmott 00009 */ 00010 00011 #ifndef __Colour__ 00012 #define __Colour__ 00013 00014 #include "gcl/GCLConfig.h" 00015 00016 #ifndef GCL_CLR_DOUBLE 00017 #include "vl/VLf.h" 00018 typedef Vec3f Colour; 00019 typedef Vec4f Colour4; 00020 typedef Mat3f ClrMat; 00021 typedef Mat4f ClrTrans; 00022 typedef Float ClrReal; 00023 #else 00024 #include "vl/VLd.h" 00025 typedef Vec3d Colour; 00026 typedef Vec4d Colour4; 00027 typedef Mat3d ClrMat; 00028 typedef Mat4d ClrTrans; 00029 typedef Double ClrReal; 00030 #endif 00031 00032 #include "cl/Array.h" 00033 #include "cl/NArray.h" 00034 00044 inline Colour RGBCol(ClrReal r, ClrReal g, ClrReal b) 00045 { return(Colour(r, g, b)); } 00046 Colour HSVCol(ClrReal hue, ClrReal saturation, ClrReal value); 00047 00048 typedef Colour Reflectance; 00049 typedef NArray<Colour> ColourList; 00050 typedef NArray<Colour4> Colour4List; 00051 typedef ColourList ReflList; 00052 00053 Colour &ClipColour(Colour &c); 00055 Colour &ClipColourZero(Colour &c); 00057 inline Colour ClrMix(const Colour &c1, const Colour &c2, ClrReal mix) 00058 { 00059 return(c1 * (1.0 - mix) + c2 * mix); 00060 } 00062 00063 00064 // --- Useful conversion factors/functions ------------------------------------ 00065 00066 const Reflectance cRGBToNTSCLum(0.299, 0.587, 0.114); 00070 const Reflectance cRGBToLum(0.3086, 0.6094, 0.0820); 00072 00073 const ClrMat cNTSCToCIE( 00074 0.67, 0.21, 0.14, // From Sillion & Puesch 00075 0.33, 0.71, 0.08, // "Radiosity", pp 211. 00076 0.00, 0.08, 0.78); 00077 00078 const ClrMat cCIEToNTSC( 00079 1.730, -0.482, -0.261, 00080 -0.814, 1.652, -0.023, 00081 0.083, -0.169, 1.284); 00082 00083 const ClrMat cRGBToYIQ( 00084 0.299, 0.587, 0.114, 00085 0.596, -0.275, -0.321, 00086 0.212, -0.523, 0.311); 00087 00088 const ClrMat cYIQToRGB( 00089 1.0, 0.956, 0.621, 00090 1.0, -0.272, -0.647, 00091 1.0, -1.105, 1.702); 00092 00093 Colour YUVToRGB(const Colour &yuv); 00094 Colour RGBToYUV(const Colour &rgb); 00096 00097 00098 // --- Useful colour constants ------------------------------------------------ 00099 00100 // RGB Constants 00101 00102 const Colour cBlack(0, 0, 0); 00103 const Colour cWhite(1, 1, 1); 00104 00105 const Colour cGrey(cWhite * 0.5); 00106 const Colour cGrey05(cWhite * 0.05); 00107 const Colour cGrey10(cWhite * 0.1); 00108 const Colour cGrey25(cWhite * 0.25); 00109 const Colour cGrey50(cWhite * 0.5); 00110 const Colour cGrey75(cWhite * 0.75); 00111 const Colour cGrey90(cWhite * 0.90); 00112 const Colour cGrey95(cWhite * 0.95); 00113 00114 const Colour cRed(1, 0, 0); 00115 const Colour cOrange(1, 0.5, 0); 00116 const Colour cYellow(1, 1, 0); 00117 const Colour cGreen(0, 1, 0); 00118 const Colour cCyan(0, 1, 1); 00119 const Colour cBlue(0, 0, 1); 00120 const Colour cPurple(1, 0, 1); 00121 00122 // HSV constants 00123 00124 const Int hsvRed = 0; 00125 const Int hsvOrange = 30; 00126 const Int hsvYellow = 60; 00127 const Int hsvGreen = 120; 00128 const Int hsvCyan = 180; 00129 const Int hsvBlue = 240; 00130 const Int hsvPurple = 300; 00131 00132 00133 // --- Colour transformations ------------------------------------------------- 00134 00136 00137 ClrTrans RGBScale(ClrReal rscale, ClrReal gscale, ClrReal bscale); 00138 ClrTrans RGBOffset(const Colour &c); 00139 ClrTrans RGBReplace(const Colour &c); 00140 ClrTrans RGBToLum(); 00141 00142 ClrTrans RGBSaturate(ClrReal sat); 00147 ClrTrans RGBPixelMix(ClrReal mix, const Colour &c); 00154 ClrTrans RGBHueRotate(ClrReal degrees); 00156 #endif