[36] | 1 | #include "OgreOcclusionCullingTerrainSceneTraverser.h"
|
---|
| 2 | //#include <windows.h>
|
---|
[35] | 3 |
|
---|
| 4 | namespace Ogre {
|
---|
| 5 | //-----------------------------------------------------------------------
|
---|
[36] | 6 | void OcclusionCullingTerrainSceneTraverser::traverseNode( Camera *cam, SceneNode *node )
|
---|
[35] | 7 | {
|
---|
| 8 | mNumTraversedNodes ++;
|
---|
| 9 |
|
---|
| 10 | if(node->numAttachedObjects() > 0)
|
---|
| 11 | {
|
---|
| 12 | renderSceneNode(cam, node);
|
---|
| 13 | }
|
---|
| 14 |
|
---|
| 15 | // internal node: add children to priority queue for further processing
|
---|
| 16 | Node::ChildNodeIterator it = node->getChildIterator();
|
---|
| 17 |
|
---|
| 18 | while (it.hasMoreElements())
|
---|
| 19 | {
|
---|
| 20 | SceneNode* sceneChild = static_cast<SceneNode*>(it.getNext());
|
---|
| 21 | mDistanceQueue->push(sceneChild);
|
---|
| 22 | }
|
---|
| 23 | }
|
---|
[37] | 24 | /* //-----------------------------------------------------------------------
|
---|
[36] | 25 | void OcclusionCullingTerrainSceneTraverser::renderSceneNode( Camera *cam, SceneNode *node )
|
---|
[35] | 26 | {
|
---|
| 27 | setRenderingMode(MODE_RENDER);
|
---|
| 28 |
|
---|
| 29 | //HACK (too slow)
|
---|
| 30 | mSceneManager->_renderSceneNode(cam, node);
|
---|
| 31 | //MessageBox( NULL, "myplugin registered", "this is my plugin", MB_OK | MB_ICONERROR | MB_TASKMODAL);
|
---|
| 32 | }
|
---|
| 33 | //-----------------------------------------------------------------------
|
---|
[36] | 34 | bool OcclusionCullingTerrainSceneTraverser::isLeaf( SceneNode *node )
|
---|
[35] | 35 | {
|
---|
| 36 | return (node->numChildren() == 0);
|
---|
| 37 | }
|
---|
| 38 | //-----------------------------------------------------------------------
|
---|
[36] | 39 | void OcclusionCullingTerrainSceneTraverser::pullUpVisibility( SceneNode *node )
|
---|
[35] | 40 | {
|
---|
| 41 | while(node && !node->isNodeVisible()) |
---|
| 42 | { |
---|
| 43 | node->setNodeVisible(true); |
---|
| 44 | node = static_cast<SceneNode *>(node->getParent()); |
---|
| 45 | }
|
---|
| 46 | }
|
---|
| 47 | //-----------------------------------------------------------------------
|
---|
[36] | 48 | void OcclusionCullingTerrainSceneTraverser::renderBoundingBox( SceneNode *node )
|
---|
[35] | 49 | {
|
---|
| 50 | // Render two halfes of the bounding box (using triangle fans)
|
---|
| 51 | for(int half = 0; half < 2; half ++)
|
---|
| 52 | {
|
---|
| 53 | SolidHalfBoundingBox *box = getSolidHalfBoundingBox(half);
|
---|
| 54 |
|
---|
| 55 | box->setupBoundingBox(node->_getWorldAABB());
|
---|
| 56 |
|
---|
| 57 | static RenderOperation ro; |
---|
| 58 | mSceneManager->useRenderableViewProjMode(box);
|
---|
| 59 | box->getRenderOperation(ro);
|
---|
| 60 | ro.srcRenderable = box;
|
---|
| 61 | mRenderSystem->_render(ro);
|
---|
| 62 |
|
---|
| 63 | //mSceneManager->renderSingleObject(getSolidHalfBoundingBox(half),
|
---|
| 64 | // getSolidHalfBoundingBox(half)->getTechnique()->getPass(0), false);
|
---|
| 65 | }
|
---|
[37] | 66 | }*/
|
---|
[35] | 67 | }
|
---|