Color.h

Go to the documentation of this file.
00001 
00005 #ifndef Color_h
00006 #define Color_h
00007 
00008 #include "Math.h"
00009 #include <iosfwd>
00010 
00011 class Color {
00012  public:
00013   Color() {
00014   }
00015 
00016   Color(const Color& copy) {
00017     for(int i=0;i<3;i++)
00018       data[i] = copy.data[i];
00019   }
00020 
00021   Color& operator=(const Color& copy) {
00022     for(int i=0;i<3;i++)
00023       data[i] = copy.data[i];
00024     return *this;
00025   }
00026 
00027   ~Color() {
00028   }
00029 
00030   double r() const {
00031     return data[0];
00032   }
00033   double g() const {
00034     return data[1];
00035   }
00036   double b() const {
00037     return data[2];
00038   }
00039 
00040   Color(float r, float g, float b) {
00041     data[0] = r;
00042     data[1] = g;
00043     data[2] = b;
00044   }
00045   Color operator+(const Color& c) const {
00046     return Color(data[0] + c.data[0], data[1]+c.data[1], data[2]+c.data[2]);
00047   }
00048   Color& operator+=(const Color& c) {
00049     data[0] += c.data[0]; data[1] += c.data[1]; data[2] += c.data[2];
00050     return *this;
00051   }
00052   Color operator-(const Color& c) const {
00053     return Color(data[0] - c.data[0], data[1]-c.data[1], data[2]-c.data[2]);
00054   }
00055   Color& operator-=(const Color& c) {
00056     data[0] -= c.data[0]; data[1] -= c.data[1]; data[2] -= c.data[2];
00057     return *this;
00058   }
00059   Color operator*(const Color& c) const {
00060     return Color(data[0] * c.data[0], data[1]*c.data[1], data[2]*c.data[2]);
00061   }
00062   Color& operator*=(const Color& c) {
00063     data[0] *= c.data[0]; data[1] *= c.data[1]; data[2] *= c.data[2];
00064     return *this;
00065   }
00066   Color operator*(double s) const {
00067     return Color(data[0]*s, data[1]*s, data[2]*s);
00068   }
00069   Color& operator*=(double s) {
00070     data[0] *= s; data[1] *= s; data[2] *= s;
00071     return *this;
00072   }
00073   Color operator*(float s) const {
00074     return Color(data[0]*s, data[1]*s, data[2]*s);
00075   }
00076   Color& operator*=(float s) {
00077     data[0] *= s; data[1] *= s; data[2] *= s;
00078     return *this;
00079   }
00080   Color operator/(double s) const {
00081     return Color(data[0]/s, data[1]/s, data[2]/s);
00082   }
00083   Color& operator/=(double s) {
00084     data[0] /= s; data[1] /= s; data[2] /= s;
00085     return *this;
00086   }
00087   Color operator/(float s) const {
00088     return Color(data[0]/s, data[1]/s, data[2]/s);
00089   }
00090   Color& operator/=(float s) {
00091     data[0] /= s; data[1] /= s; data[2] /= s;
00092     return *this;
00093   }
00094 
00095   float maxComponent() const {
00096     return Max(data[0], data[1], data[2]);
00097   }
00098 
00099  private:
00100   float data[3];
00101 };
00102 
00103 std::ostream& operator<<(std::ostream&, const Color& c);
00104 
00105 #endif

Generated on Tue Jan 29 21:34:53 2008 for specter by  doxygen 1.4.6