00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "irregulardata.h"
00025 #include "error.h"
00026 #include "dynload.h"
00027
00028 using namespace lux;
00029
00030
00031 Texture<float> * IrregularDataTexture::CreateFloatTexture(const Transform &tex2world,
00032 const TextureParams &tp) {
00033 int wlCount = 0;
00034
00035 tp.FindFloats("wavelengths", &wlCount);
00036 int dataCount = 0;
00037
00038 tp.FindFloats("data", &dataCount);
00039 if(wlCount != dataCount) {
00040 std::stringstream ss;
00041 ss << "Number of wavelengths '" << wlCount << "' does not match number of data values '"
00042 << dataCount <<"' in irregulardata texture definition.";
00043 luxError(LUX_BADTOKEN, LUX_ERROR, ss.str().c_str());
00044 }
00045 if (dataCount < 1 || wlCount < 1) {
00046 luxError(LUX_MISSINGDATA, LUX_ERROR, "No data in irregulardata texture");
00047 }
00048 return new IrregularDataFloatTexture<float>(1.f);
00049 }
00050
00051 Texture<SWCSpectrum> * IrregularDataTexture::CreateSWCSpectrumTexture(const Transform &tex2world,
00052 const TextureParams &tp) {
00053 int wlCount = 0;
00054 const float *wl = tp.FindFloats("wavelengths", &wlCount);
00055 int dataCount = 0;
00056 const float *data = tp.FindFloats("data", &dataCount);
00057 if(wlCount != dataCount) {
00058 std::stringstream ss;
00059 ss << "Number of wavelengths '" << wlCount << "' does not match number of data values '"
00060 << dataCount <<"' in irregulardata texture definition.";
00061 luxError(LUX_BADTOKEN, LUX_ERROR, ss.str().c_str());
00062 }
00063 if (dataCount < 1 || wlCount < 1) {
00064 luxError(LUX_MISSINGDATA, LUX_ERROR, "No data in irregulardata texture");
00065 float default_wl[] = {380.f, 720.f};
00066 float default_data[] = {1.f, 1.f};
00067 return new IrregularDataSpectrumTexture<SWCSpectrum>(2, default_wl, default_data);
00068 }
00069 return new IrregularDataSpectrumTexture<SWCSpectrum>(dataCount, wl, data);
00070 }
00071
00072 static DynamicLoader::RegisterFloatTexture<IrregularDataTexture> r1("irregulardata");
00073 static DynamicLoader::RegisterSWCSpectrumTexture<IrregularDataTexture> r2("irregulardata");