1 #ifndef SCHLICKPHOTONMATERIALFACTORY_HXX
2 #define SCHLICKPHOTONMATERIALFACTORY_HXX
3
4 #include "MaterialFactory.hxx"
5 #include "SchlickPhotonShader.hxx"
6 #include "SchlickPhotonDistributor.hxx"
7
8 // This class creates a SchlickPhoton-tuple based on a given material
9 class SchlickPhotonMaterialFactory
10 : public MaterialFactory
11 {
12 PhotonKDTree *photon_tree;
13 public:
14 // Use a standard white default material if nothing is specified
15 SchlickPhotonMaterialFactory(Scene *scene, PhotonKDTree *photon_tree)
16 :MaterialFactory(scene), photon_tree(photon_tree)
17 {
18 Material *mat = new Material(Vec3f(0.9f));
19 mat->SetSchlickParams(0.3f, 0.9f, 0.5f);
20 shaders.push_back(new SchlickPhotonShader(scene, mat, photon_tree));
21 photondistris.push_back(new SchlickPhotonDistributor(scene, mat));
22 lookupvector.push_back(0);
23 };
24
25 virtual ~SchlickPhotonMaterialFactory(){};
26
27 // Sets the factorie's state to a new material
28 virtual void SetMaterial(std::istream &material, const int face)
29 {
30 Material *mat = sceneDescription->parse(material);
31 shaders.push_back(new SchlickPhotonShader(scene, mat, photon_tree));
32 photondistris.push_back(new SchlickPhotonDistributor(scene, mat));
33 lookupvector.push_back(face);
34 };
35 };
36
37 #endif
syntax highlighted by Code2HTML, v. 0.9.1