Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

vuTorstensFourierFilter.cpp

Go to the documentation of this file.
00001 #include "vuTorstensFourierFilter.h"
00002 
00003 vuTorstensFourierFilter::vuTorstensFourierFilter()
00004 {
00005 }
00006 
00007 vuTorstensFourierFilter::vuTorstensFourierFilter(vuTorstensFourierFilter& l)
00008 {
00009 }
00010 
00011 vuTorstensFourierFilter::vuTorstensFourierFilter(int (*filter)(float a, float t, float *coeff), float a)
00012 {
00013   SetFilter(filter, a);
00014 }
00015 
00016 vuTorstensFourierFilter::vuTorstensFourierFilter(int (*filter)(float a, float t, float *coeff), const vuString& filterName, float a)
00017   : vuFourierFilter(filterName)
00018 {
00019   SetFilter(filter, a);
00020 }
00021 
00022 vuTorstensFourierFilter::~vuTorstensFourierFilter()
00023 {
00024 }
00025 
00026 vuTorstensFourierFilter& vuTorstensFourierFilter::operator=(vuTorstensFourierFilter& rhs)
00027 {
00028   return *this;
00029 }
00030 
00031 void vuTorstensFourierFilter::SetFilter(int (*filter)(float a, float t, float *coeff), float a)
00032 {
00033   float Coeff[VU_MAX_TFILTER_EXTENT];
00034   m_Filter = filter;
00035   m_FilterWidth = (dword) m_Filter(a, 0, Coeff);
00036   m_FilterSize = m_FilterWidth * m_FilterWidth * m_FilterWidth;
00037   m_a = a;
00038 
00039   MakeWeights();
00040 }
00041 
00042 dword vuTorstensFourierFilter::getWidth(void)
00043 {
00044   return m_FilterWidth;
00045 }
00046 
00047 void vuTorstensFourierFilter::MakeWeights(void)
00048 {
00049   float ti, tj, tk;
00050   float tstep;
00051   dword pos;
00052 
00053   m_Weights = new float[VU_FVR_FILTER_TABLE_SIZE *
00054                         VU_FVR_FILTER_TABLE_SIZE *
00055                         VU_FVR_FILTER_TABLE_SIZE * m_FilterSize];
00056 
00057   tstep = 1.0f / (float)VU_FVR_FILTER_TABLE_SIZE;
00058 
00059   pos = 0;
00060   tk = 0;
00061   for(dword k = 0; k < VU_FVR_FILTER_TABLE_SIZE; ++k) {
00062     tj = 0;
00063     for(dword j = 0; j < VU_FVR_FILTER_TABLE_SIZE; ++j) {
00064       ti = 0;
00065       for(dword i = 0;i < VU_FVR_FILTER_TABLE_SIZE; ++i) {
00066         MakeWeightCube(&m_Weights[pos], ti, tj, tk);
00067 
00068         pos += m_FilterSize;
00069         ti += tstep;
00070       }
00071       tj += tstep;
00072     }
00073     tk += tstep;
00074   }
00075 }
00076 
00077 void vuTorstensFourierFilter::MakeWeightCube(float* w, float ti, float tj, float tk)
00078 {
00079   float wi[VU_MAX_TFILTER_EXTENT], wj[VU_MAX_TFILTER_EXTENT], wk[VU_MAX_TFILTER_EXTENT];
00080 
00081   m_Filter(m_a, ti, wi);
00082   m_Filter(m_a, tj, wj);
00083   m_Filter(m_a, tk, wk);
00084 
00085   dword pos = 0;
00086   for(dword k = 0; k < m_FilterWidth; ++k)
00087     for(dword j = 0; j < m_FilterWidth; ++j)
00088       for(dword i = 0; i < m_FilterWidth; ++i)
00089         w[pos++] = wi[i] * wj[j] * wk[k];
00090 }
00091 
00092 void vuTorstensFourierFilter::getFilterNames(vuString* &names, dword& num) 
00093 {
00094   static const dword    count         = 40;
00095   static const vuString result[count] = { "d0_c0_1ef",
00096                                           "d0_c0_2ef",
00097                                           "d0_c0_3ef",
00098                                           "d0_c0_4ef",
00099                                           "d0_c1_1ef",
00100                                           "d0_c1_2ef",
00101                                           "d0_c1_3ef",
00102                                           "d0_c1_4ef",
00103                                           "d0_c2_1ef",
00104                                           "d0_c2_2ef",
00105                                           "d0_c2_3ef",
00106                                           "d0_c2_4ef",
00107                                           "d0_c3_1ef",
00108                                           "d0_c3_2ef",
00109                                           "d0_c3_3ef",
00110                                           "d0_c3_4ef",
00111                                           "d0_cn_1ef",
00112                                           "d0_cn_2ef",
00113                                           "d0_cn_3ef",
00114                                           "d0_cn_4ef",
00115 
00116                                           "d1_c0_1ef",
00117                                           "d1_c0_2ef",
00118                                           "d1_c0_3ef",
00119                                           "d1_c0_4ef",
00120                                           "d1_c1_1ef",
00121                                           "d1_c1_2ef",
00122                                           "d1_c1_3ef",
00123                                           "d1_c1_4ef",
00124                                           "d1_c2_1ef",
00125                                           "d1_c2_2ef",
00126                                           "d1_c2_3ef",
00127                                           "d1_c2_4ef",
00128                                           "d1_c3_1ef",
00129                                           "d1_c3_2ef",
00130                                           "d1_c3_3ef",
00131                                           "d1_c3_4ef",
00132                                           "d1_cn_1ef",
00133                                           "d1_cn_2ef",
00134                                           "d1_cn_3ef",
00135                                           "d1_cn_4ef" };
00136   
00137   names = (vuString *)result;
00138   num   = count;
00139 }
00140                     
00141 vuTorstensFourierFilter *vuTorstensFourierFilter::getFilter(const vuString
00142                                                             &filterName)
00143 {
00144   if (filterName == "d0_c0_1ef")
00145     return new vuTorstensFourierFilter(vuTorsten_d0_c0_1ef, "d0_c0_1ef");
00146   else if (filterName == "d0_c0_2ef")
00147     return new vuTorstensFourierFilter(vuTorsten_d0_c0_2ef, "d0_c0_2ef");
00148   else if (filterName == "d0_c0_3ef")
00149     return new vuTorstensFourierFilter(vuTorsten_d0_c0_3ef, "d0_c0_3ef");
00150   else if (filterName == "d0_c0_4ef")
00151     return new vuTorstensFourierFilter(vuTorsten_d0_c0_4ef, "d0_c0_4ef");
00152   else if (filterName == "d0_c1_1ef")
00153     return new vuTorstensFourierFilter(vuTorsten_d0_c1_1ef, "d0_c1_1ef");
00154   else if (filterName == "d0_c1_2ef")
00155     return new vuTorstensFourierFilter(vuTorsten_d0_c1_2ef, "d0_c1_2ef");
00156   else if (filterName == "d0_c1_3ef")
00157     return new vuTorstensFourierFilter(vuTorsten_d0_c1_3ef, "d0_c1_3ef");
00158   else if (filterName == "d0_c1_4ef")
00159     return new vuTorstensFourierFilter(vuTorsten_d0_c1_4ef, "d0_c1_4ef");
00160   else if (filterName == "d0_c2_1ef")
00161     return new vuTorstensFourierFilter(vuTorsten_d0_c2_1ef, "d0_c2_1ef");
00162   else if (filterName == "d0_c2_2ef")
00163     return new vuTorstensFourierFilter(vuTorsten_d0_c2_2ef, "d0_c2_2ef");
00164   else if (filterName == "d0_c2_3ef")
00165     return new vuTorstensFourierFilter(vuTorsten_d0_c2_3ef, "d0_c2_3ef");
00166   else if (filterName == "d0_c2_4ef")
00167     return new vuTorstensFourierFilter(vuTorsten_d0_c2_4ef, "d0_c2_4ef");
00168   else if (filterName == "d0_c3_1ef")
00169     return new vuTorstensFourierFilter(vuTorsten_d0_c3_1ef, "d0_c3_1ef");
00170   else if (filterName == "d0_c3_2ef")
00171     return new vuTorstensFourierFilter(vuTorsten_d0_c3_2ef, "d0_c3_2ef");
00172   else if (filterName == "d0_c3_3ef")
00173     return new vuTorstensFourierFilter(vuTorsten_d0_c3_3ef, "d0_c3_3ef");
00174   else if (filterName == "d0_c3_4ef")
00175     return new vuTorstensFourierFilter(vuTorsten_d0_c3_4ef, "d0_c3_4ef");
00176   else if (filterName == "d0_cn_1ef")
00177     return new vuTorstensFourierFilter(vuTorsten_d0_cn_1ef, "d0_cn_1ef");
00178   else if (filterName == "d0_cn_2ef")
00179     return new vuTorstensFourierFilter(vuTorsten_d0_cn_2ef, "d0_cn_2ef");
00180   else if (filterName == "d0_cn_3ef")
00181     return new vuTorstensFourierFilter(vuTorsten_d0_cn_3ef, "d0_cn_3ef");
00182   else if (filterName == "d0_cn_4ef")
00183     return new vuTorstensFourierFilter(vuTorsten_d0_cn_4ef, "d0_cn_4ef");
00184 
00185   else if (filterName == "d1_c0_1ef")
00186     return new vuTorstensFourierFilter(vuTorsten_d1_c0_1ef, "d1_c0_1ef");
00187   else if (filterName == "d1_c0_2ef")
00188     return new vuTorstensFourierFilter(vuTorsten_d1_c0_2ef, "d1_c0_2ef");
00189   else if (filterName == "d1_c0_3ef")
00190     return new vuTorstensFourierFilter(vuTorsten_d1_c0_3ef, "d1_c0_3ef");
00191   else if (filterName == "d1_c0_4ef")
00192     return new vuTorstensFourierFilter(vuTorsten_d1_c0_4ef, "d1_c0_4ef");
00193   else if (filterName == "d1_c1_1ef")
00194     return new vuTorstensFourierFilter(vuTorsten_d1_c1_1ef, "d1_c1_1ef");
00195   else if (filterName == "d1_c1_2ef")
00196     return new vuTorstensFourierFilter(vuTorsten_d1_c1_2ef, "d1_c1_2ef");
00197   else if (filterName == "d1_c1_3ef")
00198     return new vuTorstensFourierFilter(vuTorsten_d1_c1_3ef, "d1_c1_3ef");
00199   else if (filterName == "d1_c1_4ef")
00200     return new vuTorstensFourierFilter(vuTorsten_d1_c1_4ef, "d1_c1_4ef");
00201   else if (filterName == "d1_c2_1ef")
00202     return new vuTorstensFourierFilter(vuTorsten_d1_c2_1ef, "d1_c2_1ef");
00203   else if (filterName == "d1_c2_2ef")
00204     return new vuTorstensFourierFilter(vuTorsten_d1_c2_2ef, "d1_c2_2ef");
00205   else if (filterName == "d1_c2_3ef")
00206     return new vuTorstensFourierFilter(vuTorsten_d1_c2_3ef, "d1_c2_3ef");
00207   else if (filterName == "d1_c2_4ef")
00208     return new vuTorstensFourierFilter(vuTorsten_d1_c2_4ef, "d1_c2_4ef");
00209   else if (filterName == "d1_c3_1ef")
00210     return new vuTorstensFourierFilter(vuTorsten_d1_c3_1ef, "d1_c3_1ef");
00211   else if (filterName == "d1_c3_2ef")
00212     return new vuTorstensFourierFilter(vuTorsten_d1_c3_2ef, "d1_c3_2ef");
00213   else if (filterName == "d1_c3_3ef")
00214     return new vuTorstensFourierFilter(vuTorsten_d1_c3_3ef, "d1_c3_3ef");
00215   else if (filterName == "d1_c3_4ef")
00216     return new vuTorstensFourierFilter(vuTorsten_d1_c3_4ef, "d1_c3_4ef");
00217   else if (filterName == "d1_cn_1ef")
00218     return new vuTorstensFourierFilter(vuTorsten_d1_cn_1ef, "d1_cn_1ef");
00219   else if (filterName == "d1_cn_2ef")
00220     return new vuTorstensFourierFilter(vuTorsten_d1_cn_2ef, "d1_cn_2ef");
00221   else if (filterName == "d1_cn_3ef")
00222     return new vuTorstensFourierFilter(vuTorsten_d1_cn_3ef, "d1_cn_3ef");
00223   else if (filterName == "d1_cn_4ef")
00224     return new vuTorstensFourierFilter(vuTorsten_d1_cn_4ef, "d1_cn_4ef");
00225   else
00226     return NULL;
00227 }
00228 

Generated on Wed Dec 15 21:20:38 2004 for vuVolume by  doxygen 1.3.9.1