source: trunk/VUT/GtpVisibility/src/StopAndWaitCullingManager.cpp @ 139

Revision 139, 1.5 KB checked in by mattausch, 19 years ago (diff)

fixed bug with tight octree boxes
added more flexible renderqueue (can delete per flag)
reordered functions in visibility terrain scene manager

Line 
1#include "StopAndWaitCullingManager.h"
2#include <OgreLogManager.h>
3
4namespace GtpVisibility {
5
6//-----------------------------------------------------------------------
7void StopAndWaitCullingManager::RenderScene()
8{
9        while (!mHierarchyInterface->GetQueue()->empty())
10        {
11                HierarchyNode *node = mHierarchyInterface->GetQueue()->top();
12                mHierarchyInterface->GetQueue()->pop();
13                       
14                // interesting for visualization purpose
15                mHierarchyInterface->SetNodeVisible(node, false);
16                mHierarchyInterface->SetLastVisited(node, mHierarchyInterface->GetFrameId());
17
18                bool intersects = false;
19
20                if (!mHierarchyInterface->CheckFrustumVisible(node, intersects))
21                {
22                        ++ mNumFrustumCulledNodes;
23               
24                        if (mVisualizeCulledNodes)
25                        {
26                                mHierarchyInterface->VisualizeCulledNode(node, FRUSTUM_CULLED);
27                        }
28                }
29                else
30                {
31                        // if intersects near plane => skip occlusion query because wrong results possible
32                        if (intersects)
33                        {
34                    mHierarchyInterface->SetNodeVisible(node, true);
35                                mHierarchyInterface->TraverseNode(node);
36                                continue;
37                        }
38
39                        ++ mNumQueriesIssued;
40
41                        unsigned int visiblePixels = 0;
42
43                        mHierarchyInterface->IssueOcclusionQuery(node)->GetQueryResult(visiblePixels, true);
44                       
45                        // node visible
46                        if (visiblePixels > mVisibilityThreshold)
47                        {
48                                mHierarchyInterface->TraverseNode(node);
49                        }
50                        else
51                        {       
52                                ++ mNumQueryCulledNodes;
53
54                                if (mVisualizeCulledNodes)
55                                {
56                                        mHierarchyInterface->VisualizeCulledNode(node, QUERY_CULLED);
57                                }
58                        }
59                }
60        }
61}
62} // namespace GtpVisibility
Note: See TracBrowser for help on using the repository browser.