source: trunk/VUT/GtpVisibilityPreprocessor/src/RenderSimulator.cpp @ 406

Revision 406, 2.4 KB checked in by mattausch, 19 years ago (diff)

started kd based bottom-up view cells

Line 
1#include "RenderSimulator.h"
2#include "KdTree.h"
3#include "ViewCellBsp.h"
4#include "ViewCell.h"
5
6RenderSimulator::RenderSimulator()
7{}
8
9RenderSimulator::RenderSimulator(float objRenderCost, float vcOverhead):
10mObjRenderCost(objRenderCost), mVcOverhead(vcOverhead)
11{
12}
13
14/*****************************************************
15 *     class ViewCellRenderSimulator implementation  *
16 *****************************************************/
17
18BspTreeRenderSimulator::BspTreeRenderSimulator(float objRenderCost,
19                                                                                           float vcOverhead,
20                                                                                           BspTree *bspTree):
21RenderSimulator(objRenderCost, vcOverhead), mBspTree(bspTree)
22{
23}
24
25Real BspTreeRenderSimulator::SimulateRendering()
26{
27        Real renderTime = 0;
28
29        // render time for 1 object of PVS
30        const float objRt = mObjRenderCost;
31         // const overhead for crossing a view cell border
32        const float vcOverhead = mVcOverhead;
33       
34        // total area of view cells
35        float totalArea = 0;//= mKdTree->GetBox().SurfaceArea();
36
37        ViewCellContainer viewCells;
38
39        mBspTree->CollectViewCells(viewCells);
40
41        ViewCellContainer::const_iterator it, it_end = viewCells.end();
42       
43        for (it = viewCells.begin(); it != it_end; ++ it)
44        {
45                // surface area substitute for probability
46                PolygonContainer cell;
47                float area = 0;
48
49                mBspTree->ConstructGeometry(dynamic_cast<BspViewCell *>(*it), cell);
50
51                area = Polygon3::GetArea(cell);
52               
53                renderTime += area * RenderPvs(*(*it), objRt) + vcOverhead;
54                totalArea += area;
55                CLEAR_CONTAINER(cell);
56        }
57
58        renderTime /= totalArea;
59
60        //Debug << "render time without overhead: " << renderTime * 1e-3 << endl;
61        //renderTime += (float)viewCells.size() * vcOverhead;
62
63        return renderTime;
64}
65
66Real BspTreeRenderSimulator::RenderPvs(ViewCell &viewCell, float objRenderTime) const
67{
68        return viewCell.GetPvs().GetSize() * objRenderTime;
69}
70
71/*****************************************************
72 *     class KdLeafRenderSimulator implementation    *
73 *****************************************************/
74
75KdTreeRenderSimulator::KdTreeRenderSimulator(float objRenderCost,
76                                                                                         float vcOverhead,
77                                                                                         KdTree *kdTree):
78RenderSimulator(objRenderCost, vcOverhead), mKdTree(kdTree)
79{
80}
81
82Real KdTreeRenderSimulator::SimulateRendering()
83{
84        Real renderTime = 0;
85
86        // total area of view cells
87        float totalArea = 0;//= mKdTree->GetBox().SurfaceArea();
88
89        return renderTime;
90}
Note: See TracBrowser for help on using the repository browser.