#pragma once #include "Transformation.hpp" #include "TriangleMesh.h" struct D3DXMATRIX; class Transformed : public Intersectable { Transformation modelToWorld; Transformation worldToModel; Intersectable* object; public: Transformed(std::istream& isc, Material** materialTable, int nMaterials) { worldToModel = Transformation(isc); char key[200]; isc >> key; /* if(strcmp(key, "Sphere") == 0) object = new Sphere(isc, materialTable, nMaterials); else if(strcmp(key, "PlaneXAligned") == 0) object = new PlaneXAligned(isc, materialTable, nMaterials); else if(strcmp(key, "PlaneYAligned") == 0) object = new PlaneYAligned(isc, materialTable, nMaterials); else if(strcmp(key, "PlaneZAligned") == 0) object = new PlaneZAligned(isc, materialTable, nMaterials); else*/ if(strcmp(key, "TriangleMesh") == 0) object = new TriangleMesh(isc, materialTable, nMaterials); modelToWorld.setInvert(worldToModel); object->getTransformedBoundingBox(modelToWorld, bbox); material = object->getMaterial(); } Transformed(Intersectable* object) { this->object = object; bbox = object->bbox; material = object->getMaterial(); } void translate(Vector translation); void rotateX(float angle); void rotateY(float angle); void rotateZ(float angle); void scale(float factor); bool intersect(const Ray& ray, float& depth, float rayMin, float rayMax); bool intersectBackSide(const Ray& ray, float& depth, float rayMin, float rayMax); void getOccluder(int index, Occluder& occ); void setTransforms(D3DXMATRIX& mw, D3DXMATRIX& itmw); float getSurfaceArea(); void sampleSurface(Radion& radion); };