00001 #ifndef _VUCOLOUR31A_H_
00002 #define _VUCOLOUR31A_H_
00003
00004 #include <math.h>
00005 #include "vuColour.h"
00006
00008 static float CXFRGBto31[31][3] = {
00009 { 3114.62, -795.361, 1344.83 },
00010 { 1771, -895.781, 2188.5 },
00011 { -316.973, 37.1734, -337.209 },
00012 { -209.781, 121.115, 24.6211 },
00013 { -2248.86, 6.00256, -576.98 },
00014 { 536.207, -20.1586, 335.44 },
00015 { -38.9062, -26.7664, 10.4036 },
00016 { 1191.22, -503.787, 762.416 },
00017 { -1847.7, 908.315, -2048.51 },
00018 { 526.844, -111.009, 1208.23 },
00019 { 1026.86, -105.122, 299.374 },
00020 { -39.5918, 73.5609, -65.1626 },
00021 { -362.516, -193.222, -240.738 },
00022 };
00023
00024 class vuColourRGBa;
00025
00030 class vuColour31a : public vuColour<32>
00031 {
00032 public:
00034 vuColour31a() : vuColour<32>() {};
00036 vuColour31a(const vuColour31a& inst) : vuColour<32>(inst) {};
00038 vuColour31a(const vuColour<32>& inst) : vuColour<32>(inst) {};
00041 vuColour31a(const float *f) : vuColour<32>(f) {};
00044 vuColour31a(const double *f) : vuColour<32>(f) {};
00046 vuColour31a(const float f) : vuColour<32>(f) {};
00047
00049 vuColour31a(const vuColourRGBa& rgba) { from(rgba); };
00050
00055 void from(const vuColourRGBa& rgba)
00056 {
00057 fromColourN((vuColour<4>&)(rgba), (float*)CXFRGBto31);
00058 };
00059
00061 vuColour31a& planckian(const float T)
00062 {
00063 m_Data[0] = float(537.8239999*exp(-10277.14286/T));
00064 m_Data[1] = float(475.3580484*exp(-9399.825790/T));
00065 m_Data[2] = float(421.3991769*exp(-8564.285720/T));
00066 m_Data[3] = float(374.6259499*exp(-7767.607980/T));
00067 m_Data[4] = float(333.9463897*exp(-7007.142860/T));
00068 m_Data[5] = float(298.4541116*exp(-6280.476190/T));
00069 m_Data[6] = float(267.3935805*exp(-5585.403730/T));
00070 m_Data[7] = float(240.1324465*exp(-4919.908820/T));
00071 m_Data[8] = float(216.1394033*exp(-4282.142860/T));
00072 m_Data[9] = float(194.9663831*exp(-3670.408170/T));
00073 m_Data[10] = float(176.2341683*exp(-3083.142860/T));
00074 m_Data[11] = float(159.6207160*exp(-2518.907570/T));
00075 m_Data[12] = float(144.8516401*exp(-1976.373630/T));
00076 m_Data[13] = float(131.6924226*exp(-1454.312670/T));
00077 m_Data[14] = float(119.9420137*exp(-951.5873000/T));
00078 m_Data[15] = float(109.4275530*exp(-467.1428600/T));
00079 m_Data[16] = 100.0f;
00080 m_Data[17] = float(91.53050461*exp(450.7518800/T));
00081 m_Data[18] = float(83.90738129*exp(885.9605900/T));
00082 m_Data[19] = float(77.03357918*exp(1306.416460/T));
00083 m_Data[20] = float(70.82455967*exp(1712.857140/T));
00084 m_Data[21] = float(65.20651053*exp(2105.971890/T));
00085 m_Data[22] = float(60.11483889*exp(2486.405530/T));
00086 m_Data[23] = float(55.49289573*exp(2854.761900/T));
00087 m_Data[24] = float(51.29089355*exp(3211.607140/T));
00088 m_Data[25] = float(47.46498542*exp(3557.472520/T));
00089 m_Data[26] = float(43.97647930*exp(3892.857140/T));
00090 m_Data[27] = float(40.79116618*exp(4218.230270/T));
00091 m_Data[28] = float(37.87874413*exp(4534.033610/T));
00092 m_Data[29] = float(35.21232335*exp(4840.683230/T));
00093 m_Data[30] = float(32.76800000*exp(5138.571430/T));
00094 m_Data[31] = 1.0f;
00095 return *this;
00096 };
00097
00098 };
00099
00100 #endif
00101
00102
00103
00104