00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "utilities.h"
00024
00025 using namespace sheep;
00026 using namespace std;
00027 using namespace toxic;
00028
00029 Real ConversionTables::m_cos_phi[256];
00030 Real ConversionTables::m_sin_phi[256];
00031 Real ConversionTables::m_cos_theta[256];
00032 Real ConversionTables::m_sin_theta[256];
00033 Vector3 ConversionTables::m_direction[256];
00034
00035
00036 static ConversionTables conversion_tables;
00037
00038 ConversionTables::ConversionTables() {
00039 for(int i = 0; i < 256; ++i) {
00040 const Real angle = static_cast<Real>(i) / 256.0 * PI;
00041
00042 m_cos_phi[i] = cos(2.0 * angle);
00043 m_sin_phi[i] = sin(2.0 * angle);
00044 m_cos_theta[i] = cos(angle);
00045 m_sin_theta[i] = sin(angle);
00046 }
00047
00048 for(int p = 0; p < 16; ++p) {
00049 const Real phi = static_cast<Real>(p) / 8.0 * PI;
00050
00051 for(int t = 0; t < 16; ++t) {
00052 const Real theta = static_cast<Real>(t) / 16.0 * PI;
00053
00054 m_direction[p * 16 + t] = SphericalCoordsToVector(phi, theta);
00055 }
00056 }
00057 }