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 "mixmaterial.h"
00025 #include "bxdf.h"
00026 #include "paramset.h"
00027 #include "dynload.h"
00028
00029 using namespace lux;
00030
00031
00032 BSDF *MixMaterial::GetBSDF(const TsPack *tspack, const DifferentialGeometry &dgGeom, const DifferentialGeometry &dgShading) const {
00033 MixBSDF *bsdf = BSDF_ALLOC(tspack, MixBSDF)(dgShading, dgGeom.nn);
00034 float amt = amount->Evaluate(tspack, dgShading);
00035 bsdf->Add(amt, child1->GetBSDF(tspack, dgGeom, dgShading));
00036 bsdf->Add(1.f - amt, child2->GetBSDF(tspack, dgGeom, dgShading));
00037 bsdf->SetCompositingParams(compParams);
00038 return bsdf;
00039 }
00040 Material* MixMaterial::CreateMaterial(const Transform &xform,
00041 const TextureParams &mp) {
00042 string namedmaterial1 = mp.FindString("namedmaterial1");
00043 string namedmaterial2 = mp.FindString("namedmaterial2");
00044 boost::shared_ptr<Texture<float> > amount = mp.GetFloatTexture("amount", 0.5f);
00045
00046
00047 CompositingParams cP;
00048 FindCompositingParams(mp, &cP);
00049 return new MixMaterial(amount, cP);
00050 }
00051
00052 static DynamicLoader::RegisterMaterial<MixMaterial> r("mix");