#pragma once #include #include "Vector.hpp" #include "Radion.hpp" #include "RenderStrategy.h" #include "SubEntity.h" class Entity { friend class SubEntity; friend class DepthRenderStrategy; friend class FinalCompositionRenderStrategy; D3DXMATRIX modelWorldTransform; //!< modeling transform D3DXMATRIX inverseTransposedModelWorldTransform; //!< IT modeling transform for surface normal transformation char name[256]; char prmFileName[256]; Mesh* mesh; unsigned int nNearClusters; std::vector subEntities; float surfaceArea; public: Entity(Mesh* baseMesh, const char* entityName, const char* prmFileName, const D3DXMATRIX& trafo, int nNearClusters); ~Entity(void); void renderPRM( std::vector& clusterRadions, unsigned int clusterId); void normalizePRM(); void clearPRM(); void drawAllSubEntities(const RenderStrategy& renderStrategy); float getSurfaceArea(); void findNearClusters(const std::vector& starters, unsigned int nClusters); void gatherRayTraceEntities(std::vector& rayTraceEntities); const Material* sampleSurface(Radion& sample); void loadPRM(); void savePRM(); void saveSceneInfo(std::ofstream& psf); };