source: GTP/trunk/App/Demos/Vis/CHC_revisited/StopAndWaitTraverser.cpp @ 2764

Revision 2764, 1.6 KB checked in by mattausch, 16 years ago (diff)
Line 
1#include "StopAndWaitTraverser.h"
2#include "SceneEntity.h"
3
4
5namespace CHCDemo
6{
7
8using namespace std;
9
10
11
12StopAndWaitTraverser::StopAndWaitTraverser(): RenderTraverser()
13{
14}
15
16
17StopAndWaitTraverser::~StopAndWaitTraverser()
18{
19        //DelQueries();
20}
21
22
23void StopAndWaitTraverser::Render()
24{
25        mStats.Reset();
26        mRenderState->mTexturesEnabled = false;
27        EnqueueNode(mBvh->GetRoot());
28
29        //cout<<"\n***** starting frame **********\n";
30        int traversed = 0;
31        while (!mDistanceQueue.empty())
32        {
33                BvhNode *node = mDistanceQueue.top();
34                mDistanceQueue.pop();
35       
36                //float d = mBvh->GetDistance(node);cout << d << " ";
37
38                // interesting for the visualization, so rest and set
39                node->SetVisible(false);
40
41
42                if (mBvh->IsWithinViewFrustum(node))
43                {
44                        // if intersects near plane assume visible and don't issue test
45                        if (IntersectsNearPlane(node))
46                        {
47                                TraverseNode(node);
48                        }
49                        else
50                        {
51                                OcclusionQuery *query = IssueOcclusionQuery(node, false);
52
53                                int visiblePixels = query->GetQueryResult();
54
55                                if (visiblePixels > mVisibilityThreshold)
56                                {
57                                        //cout<< "visible: " << visiblePixels << endl;
58                                        // update node's visited flag => needed for rendering
59                                        // so set it also here
60                                        //node->SetLastVisited(mFrameID);
61                                        //node->SetVisible(true);
62                               
63                                        TraverseNode(node);
64                                }
65                                else
66                                {
67                                        ++ mStats.mNumQueryCulledNodes;
68                                }
69                        }
70                }
71                else
72                {
73                        ++ mStats.mNumFrustumCulledNodes;
74                }
75                //cout << "intersect: " << intersect << " bx " << node->GetBox() << endl;
76        }
77
78        mQueryHandler.ResetQueries();
79        //std::cout << "traversed: " << traversed << std::endl;
80}
81
82}
Note: See TracBrowser for help on using the repository browser.