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 "bilerp.h"
00025 #include "dynload.h"
00026
00027 using namespace lux;
00028
00029
00030 Texture<float>* BilerpFloatTexture::CreateFloatTexture(const Transform &tex2world, const TextureParams &tp)
00031 {
00032
00033 TextureMapping2D *map = NULL;
00034 string type = tp.FindString("mapping");
00035 if (type == "" || type == "uv") {
00036 float su = tp.FindFloat("uscale", 1.);
00037 float sv = tp.FindFloat("vscale", 1.);
00038 float du = tp.FindFloat("udelta", 0.);
00039 float dv = tp.FindFloat("vdelta", 0.);
00040 map = new UVMapping2D(su, sv, du, dv);
00041 }
00042 else if (type == "spherical") map = new SphericalMapping2D(tex2world.GetInverse());
00043 else if (type == "cylindrical") map = new CylindricalMapping2D(tex2world.GetInverse());
00044 else if (type == "planar")
00045 map = new PlanarMapping2D(tp.FindVector("v1", Vector(1,0,0)),
00046 tp.FindVector("v2", Vector(0,1,0)),
00047 tp.FindFloat("udelta", 0.f), tp.FindFloat("vdelta", 0.f));
00048 else {
00049 std::stringstream ss;
00050 ss<<"2D texture mapping '"<<type<<"' unknown";
00051 luxError(LUX_UNIMPLEMENT,LUX_ERROR,ss.str().c_str());
00052
00053 map = new UVMapping2D;
00054 }
00055 return new BilerpFloatTexture(map,
00056 tp.FindFloat("v00", 0.f), tp.FindFloat("v01", 1.f),
00057 tp.FindFloat("v10", 0.f), tp.FindFloat("v11", 1.f));
00058 }
00059
00060 Texture<SWCSpectrum>* BilerpSpectrumTexture::CreateSWCSpectrumTexture(const Transform &tex2world,
00061 const TextureParams &tp) {
00062
00063 TextureMapping2D *map = NULL;
00064 string type = tp.FindString("mapping");
00065 if (type == "" || type == "uv") {
00066 float su = tp.FindFloat("uscale", 1.);
00067 float sv = tp.FindFloat("vscale", 1.);
00068 float du = tp.FindFloat("udelta", 0.);
00069 float dv = tp.FindFloat("vdelta", 0.);
00070 map = new UVMapping2D(su, sv, du, dv);
00071 }
00072 else if (type == "spherical") map = new SphericalMapping2D(tex2world.GetInverse());
00073 else if (type == "cylindrical") map = new CylindricalMapping2D(tex2world.GetInverse());
00074 else if (type == "planar")
00075 map = new PlanarMapping2D(tp.FindVector("v1", Vector(1,0,0)),
00076 tp.FindVector("v2", Vector(0,1,0)),
00077 tp.FindFloat("udelta", 0.f), tp.FindFloat("vdelta", 0.f));
00078 else {
00079
00080 std::stringstream ss;
00081 ss<<"2D texture mapping '"<<type<<"' unknown";
00082 luxError(LUX_UNIMPLEMENT,LUX_ERROR,ss.str().c_str());
00083 map = new UVMapping2D;
00084 }
00085 return new BilerpSpectrumTexture(map,
00086 tp.FindRGBColor("v00", 0.f), tp.FindRGBColor("v01", 1.f),
00087 tp.FindRGBColor("v10", 0.f), tp.FindRGBColor("v11", 1.f));
00088 }
00089
00090 static DynamicLoader::RegisterFloatTexture<BilerpFloatTexture> r1("bilerp");
00091 static DynamicLoader::RegisterSWCSpectrumTexture<BilerpSpectrumTexture> r2("bilerp");