[3258] | 1 | #ifndef __PVSCOLLECTIONRENDERER_H
|
---|
| 2 | #define __PVSCOLLECTIONRENDERER_H
|
---|
| 3 |
|
---|
| 4 | #include "RenderTraverser.h"
|
---|
| 5 |
|
---|
| 6 | namespace CHCDemoEngine
|
---|
| 7 | {
|
---|
| 8 |
|
---|
| 9 | struct ViewCell;
|
---|
| 10 |
|
---|
| 11 | /** Preprocessing as well as online culling using hardware occlusion
|
---|
| 12 | queries have certain pros and cons. This method allows
|
---|
| 13 | us to combine those two paradigms for the maximum performance.
|
---|
| 14 | In particular, we propose following
|
---|
| 15 | algorithm, which gets rid of most of the shortcomings of either
|
---|
| 16 | approach. I.e., it is a strictly conservative approach that requires
|
---|
| 17 | only very short preprocessing time in the range of some seconds, while
|
---|
| 18 | inducing practically no overhead during runtime.
|
---|
| 19 |
|
---|
| 20 | First we compute a very coarse global visibilitiy solution using our
|
---|
| 21 | sampling based preprocessor, which will be already sufficient to drive the
|
---|
| 22 | online alorithm. During walkthrough, we use occlusion queries to test
|
---|
| 23 | potentially invisible objects in a very efficient way, eliminating most of
|
---|
| 24 | the overhead of the query testing. The method assumes that previously
|
---|
| 25 | invisible objects are not part of a PVS, and as long as the assumption
|
---|
| 26 | hold's the algorithm has very low overhead. The method is conservative, and
|
---|
| 27 | converges over time in the sense that newly found visible objects are added
|
---|
| 28 | to the PVS. As the PVSs become more and more exact, the render time
|
---|
| 29 | overhead reduces to a minimum.
|
---|
| 30 | */
|
---|
| 31 | class PvsCollectionRenderer: public RenderTraverser
|
---|
| 32 | {
|
---|
| 33 | public:
|
---|
| 34 | /** Default constructor.
|
---|
| 35 | */
|
---|
| 36 | PvsCollectionRenderer();
|
---|
| 37 |
|
---|
| 38 | virtual ~PvsCollectionRenderer();
|
---|
| 39 |
|
---|
| 40 | void SetViewCell(ViewCell *vc) { mViewCell = vc; }
|
---|
| 41 |
|
---|
[3284] | 42 | //virtual int GetType() const { return CULL_COLLECTOR; }
|
---|
| 43 | virtual int GetType() const { return -1; }
|
---|
[3258] | 44 |
|
---|
| 45 | protected:
|
---|
| 46 |
|
---|
| 47 | /** Traverses and renders the scene with the specified method
|
---|
| 48 | */
|
---|
| 49 | virtual void Traverse();
|
---|
| 50 |
|
---|
| 51 | void AddGeometryToPIS(BvhNode *node);
|
---|
| 52 |
|
---|
| 53 |
|
---|
| 54 | //////////////////////
|
---|
| 55 |
|
---|
| 56 | ViewCell *mViewCell;
|
---|
| 57 | /// the potentially invisible set of objects
|
---|
| 58 | BvhNodeContainer mPIS;
|
---|
| 59 | };
|
---|
| 60 |
|
---|
| 61 |
|
---|
| 62 | }
|
---|
| 63 |
|
---|
| 64 |
|
---|
| 65 |
|
---|
| 66 | #endif // RENDERTRAVERSER_H |
---|