Ejemplo n.º 1
0
Scene* ConfigReader::parse(){
	
	string line, label, rest, svalue;
	while ( getline(is_f,line)){
		    parseObject(line,label,rest);

			if (label == "sphere"   )  {
				Sphere* s = new Sphere();
				if (parseSphere(rest,*s)){
					_s.objects.push_back(s);
					
				}
				if (s->isLight())
					_s.olights.push_back(s);
			}
			else if (label == "scene"    )  {
				if (parseScene(rest,_s)){
					
				}
			}
			else if (label == "camera"    )  {
				
				if (parseCamera(rest,_s.camera)){
					
				}
			}else if (label == "material" )  {
				Material tmp;
				Material *m = NULL;
				if (parseMaterial(rest,tmp)){
					switch (tmp.type) {
					case DIFF:
						m = new DiffuseMaterial(tmp);
						break;
					case SPEC:
						m = new MirrorMaterial(tmp);
						break;
					case SPECP:
						m = new PhongMetalMaterial(tmp);
						break;
					case DSPEC:
						m = new DiffSpecularMaterial(tmp);
						break;
					case REFR:
						m = new DielectricMaterial(tmp);
						break;
					}
					_s.materials.push_back(m);
				}
			}
			else if (label == "plane"    )  {
				Plane* p  = new Plane();
				if (parsePlane(rest,*p)){
					_s.objects.push_back(p);
					
				}
				if (p->isLight())
					_s.olights.push_back(p);
			}
			else if (label == "frame"    )  {
				Frame* f  = new Frame();
				if (parseFrame(rest,*f)){
					_s.objects.push_back(f);
					
				}
				if (f->isLight())
					_s.olights.push_back(f);
			}
			else if (label == "disc"    )  {
				Disc* c  = new Disc();
				if (parseDisc(rest,*c)){
					_s.objects.push_back(c);
					
				}
				if (c->isLight())
					_s.olights.push_back(c);
			}
			if (label == "triangle"    )  {
				Triangle* t  = new Triangle();
				if (parseTriangle(rest,*t)){
					_s.objects.push_back(t);
					
				}
				if (t->isLight())
					_s.olights.push_back(t);
			}
			else if (label == "box"     )  {
				Box* b  = new Box();
				if (parseBox(rest,*b)){
					b->fill();
					_s.objects.push_back(b);
					
				}				
				if (b->isLight())
					_s.olights.push_back(b);
			}			
	}
	
	return &_s;
}