source: trunk/VUT/GtpVisibilityPreprocessor/src/RenderSimulator.h @ 440

Revision 440, 2.7 KB checked in by mattausch, 19 years ago (diff)
Line 
1#ifndef _RenderSimulator_h__
2#define _RenderSimulator_h__
3
4#include "common.h"
5#include "Statistics.h"
6
7class BspTree;
8class KdTree;
9class ViewCell;
10class KdLeaf;
11
12class SimulationStatistics: public StatisticsBase
13{
14public:
15        /// view cell with the biggest "cost"
16        float maxCost;
17        /// view cell with the minimal "cost"
18    float minCost;
19        /// average render time
20        float avgRenderTime;
21        /// average render time with the overhead when crossing view cells
22        float avgRtWithoutOverhead;
23 
24        void Reset()
25        {
26                maxCost = 0;
27                minCost = 999999;
28                avgRenderTime = 0;
29                avgRtWithoutOverhead = 0;
30        }
31
32        void Print(ostream &app) const;
33
34        friend ostream &operator<<(ostream &s, const SimulationStatistics &stat)
35        {
36                stat.Print(s);
37                return s;
38        } 
39};
40
41/** Simulated rendering using a simple render heuristics. Used to evaluate the
42        quality of the view cell partition.
43*/
44class RenderSimulator
45{
46
47public:
48        RenderSimulator();
49        /** Constructor taking the estimated render cost,
50                the view cell overhead,
51                and the average move speed of the player into account.
52        */
53        RenderSimulator(float objRendercost, float vcOverhead, float moveSpeed);
54
55        /** Simulates rendering of the view cells.
56                @returns the statistics of the simulation.
57        */
58        virtual SimulationStatistics SimulateRendering() = 0;
59
60        /** Sets estimated render time for a single object in the PVS.
61        */
62        void SetObjectRenderCost(const float objRenderCost);
63
64        /** Contant overhead for crossing a view cell border.
65        */
66        void SetVcOverhead(const float vcOverhead);
67
68        /** Average move speed of the player during rendering.
69        */
70        void SetMoveSpeed(const float moveSpeed);
71
72
73protected:
74
75        /// render time for single object of the PVS
76        float mObjRenderCost;
77        /// const overhead for crossing a view cell border
78        float mVcOverhead;
79        /// move speed of player
80        float mMoveSpeed;
81};
82
83class BspRenderSimulator: public RenderSimulator
84{
85public:
86        BspRenderSimulator(BspTree *bspTree);
87
88        BspRenderSimulator(float objRenderCost,
89                                                           float vcOverhead,
90                                                           float moveSpeed,
91                                                           BspTree *bspTree);
92
93        SimulationStatistics SimulateRendering();
94
95protected:
96        /** Simulates rendering of the pvs of one view cell, with given rendering time for an object.
97                @param viewCell the view cell holding the Pvs
98                @param objRenderTime estimated render time for one object of the Pvs
99        */
100        Real RenderPvs(ViewCell &viewCell, const float objRenderTime) const;
101
102        BspTree *mBspTree;
103};
104
105class KdRenderSimulator: public RenderSimulator
106{
107public:
108        KdRenderSimulator(KdTree *kdTree);
109
110        KdRenderSimulator(float objRenderCost,
111                                                          float vcOverhead,
112                                                          float moveSpeed,
113                                                          KdTree *kdTree);
114        SimulationStatistics SimulateRendering();
115
116protected:
117
118        Real RenderPvs(KdLeaf *leaf, float objRenderTime) const;
119
120        KdTree *mKdTree;
121};
122
123#endif // RenderSimulator
Note: See TracBrowser for help on using the repository browser.