00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "colorVector.h"
00017 #include<stdlib.h>
00018 #include<memory.h>
00019
00020 namespace color
00021 {
00022
00023
00024 unsigned int Color3D::toInteger() const
00025 {
00026
00027 union {
00028 unsigned char values[4];
00029 unsigned int value;
00030 } val;
00031
00032 val.values[0] = static_cast<unsigned char>(color.rgb[0]);
00033 val.values[1] = static_cast<unsigned char>(color.rgb[1]);
00034 val.values[2] = static_cast<unsigned char>(color.rgb[2]);
00035 val.values[3] = static_cast<unsigned char>(color.rgb[3]);
00036
00037 return val.value;
00038
00039 }
00040
00041
00042 std::ostream& operator<<(std::ostream& out, const Color3D &c)
00043 {
00044
00045 out << "[";
00046 unsigned int i;
00047 for(i = 0; i < 3; i++)
00048 {
00049
00050 out << c.color.rgb[i] << ((i < 2) ? "," : "");
00051
00052 }
00053 out << "]";
00054
00055 return out;
00056
00057 }
00058
00059
00060 Color3D::Color3D()
00061 {
00062
00063
00064 memset(&color, 0, sizeof(color));
00065
00066 }
00067
00068 Color3D::Color3D(const Color3D &c)
00069 {
00070
00071 for(unsigned int i = 0; i < 4; i++)
00072 {
00073
00074 color.rgb[i] = c.color.rgb[i];
00075
00076 }
00077
00078
00079 }
00080
00081
00082 void Color3D::setcolor(float r, float g, float b, float a)
00083 {
00084
00085 color.rgb[0] = r, color.rgb[1] = g, color.rgb[2] = b, color.rgb[3] = a;
00086
00087 }
00088
00089
00090 const union _colorVertex &Color3D::getColor() const
00091 {
00092 return color;
00093 }
00094
00095
00096 void Color3D::add(const Color3D &c)
00097 {
00098
00099 color.rgb[0]+=c.color.rgb[0];
00100 color.rgb[1]+=c.color.rgb[1];
00101 color.rgb[2]+=c.color.rgb[2];
00102 color.rgb[3]+=c.color.rgb[3];
00103
00104
00105 }
00106 void Color3D::sub(const Color3D &c)
00107 {
00108
00109
00110 color.rgb[0]-=c.color.rgb[0];
00111 color.rgb[1]-=c.color.rgb[1];
00112 color.rgb[2]-=c.color.rgb[2];
00113 color.rgb[3]-=c.color.rgb[3];
00114
00115
00116 }
00117 void Color3D::mul(const Color3D &c)
00118 {
00119
00120 color.rgb[0] *= c.color.rgb[0];
00121 color.rgb[1] *= c.color.rgb[1];
00122 color.rgb[2] *= c.color.rgb[2];
00123 color.rgb[3] *= c.color.rgb[3];
00124
00125
00126 }
00127 void Color3D::div(const Color3D &c)
00128 {
00129
00130 if(c.color.rgb[0] != 0)
00131 color.rgb[0] /= c.color.rgb[0];
00132 if(c.color.rgb[1] != 0)
00133 color.rgb[1] /= c.color.rgb[1];
00134 if(c.color.rgb[2] != 0)
00135 color.rgb[2] /= c.color.rgb[2];
00136 if(c.color.rgb[3] != 0)
00137 color.rgb[3] /= c.color.rgb[3];
00138
00139 }
00140
00141
00142 Color3D &Color3D::operator=(const Color3D &c)
00143 {
00144
00145 for(unsigned int i = 0; i < 4; i++)
00146 {
00147 color.rgb[i] = c.color.rgb[i];
00148 }
00149
00150 return *this;
00151
00152 }
00153
00154
00155 }
00156
00157