Line | |
---|
1 | #pragma once
|
---|
2 |
|
---|
3 | #include <vector>
|
---|
4 | #include "Vector.hpp"
|
---|
5 | #include "Transformed.h"
|
---|
6 | class Mesh;
|
---|
7 | class SubMesh;
|
---|
8 | class Entity;
|
---|
9 | class RenderStrategy;
|
---|
10 |
|
---|
11 | class SubEntity
|
---|
12 | {
|
---|
13 | friend class FinalCompositionRenderStrategy;
|
---|
14 |
|
---|
15 | protected:
|
---|
16 | Entity* parent;
|
---|
17 | int nNearClusters;
|
---|
18 |
|
---|
19 | SubMesh* subMesh; //!< mesh
|
---|
20 | Transformed* rayTraceEntity; //!< raytracable entity containing the subMesh's TriangleMesh
|
---|
21 |
|
---|
22 | LPDIRECT3DTEXTURE9 prmTexture; //!< a collection of tiled UV atlases containing illuminaton contributions of nearest entry point clusters
|
---|
23 | LPDIRECT3DSURFACE9 prmSurface; //!< prmTexture's surface
|
---|
24 |
|
---|
25 | int prmxres;
|
---|
26 | int prmyres;
|
---|
27 |
|
---|
28 | void createRayTraceEntity(); //!< setup rayTraceEntity
|
---|
29 |
|
---|
30 | //! array of cluster indices storing which clusters are relevant. PRM tiles correspond to these clusters
|
---|
31 | unsigned int nearClusterIndices[32];
|
---|
32 |
|
---|
33 |
|
---|
34 | public:
|
---|
35 | //! clear PRM to float4(0, 0, 0, 0)
|
---|
36 | void clearPRM();
|
---|
37 |
|
---|
38 | //! render contributions of virtual light sources in 'bushRadions' to atlas corresponding to cluster 'bushId'
|
---|
39 | void renderPRM( std::vector<Radion>& clusterRadions, unsigned int clusterId);
|
---|
40 |
|
---|
41 | //! downscale pixel values according to alpha (render-to-the-pixel counter) to get rid of overlapping edge artifacts
|
---|
42 | void normalizePRM();
|
---|
43 |
|
---|
44 | //! fill the nearClusterIndices array
|
---|
45 | void findNearClusters(const std::vector<Radion>& starters, unsigned int nClusters);
|
---|
46 |
|
---|
47 | public:
|
---|
48 | SubEntity(Entity* parent, SubMesh* subMesh, int nNearClusters);
|
---|
49 | ~SubEntity(void);
|
---|
50 |
|
---|
51 | Intersectable* getRayTraceEntity();
|
---|
52 |
|
---|
53 | void draw(const RenderStrategy& renderStrategy);
|
---|
54 | float getSurfaceArea();
|
---|
55 | const Material* sampleSurface(Radion& sample);
|
---|
56 |
|
---|
57 | void savePRM();
|
---|
58 | void loadPRM();
|
---|
59 |
|
---|
60 | void saveSceneInfo(std::ofstream& psf);
|
---|
61 | };
|
---|
Note: See
TracBrowser
for help on using the repository browser.