source: trunk/VUT/Ogre/src/OgrePlatformQueryManager.cpp @ 159

Revision 159, 2.6 KB checked in by mattausch, 19 years ago (diff)

added flags for switching on/off transparents for item buffer and vertex programs for depth pass / item buffer

Line 
1#include "OgrePlatformQueryManager.h"
2#include "OcclusionQuery.h"
3#include <OgreSceneManager.h>
4#include <OgreLogManager.h>
5#include <OgreStringConverter.h>
6#include <vector>
7
8
9namespace Ogre {
10//-----------------------------------------------------------------------
11PlatformQueryManager::PlatformQueryManager(PlatformHierarchyInterface *hierarchyInterface, Viewport *vp):
12QueryManager(hierarchyInterface), mViewport(vp), mWasInitialised(false)
13{
14}
15//-----------------------------------------------------------------------
16bool PlatformQueryManager::ShootRay(const Ray &ray, std::vector<Mesh *> *visibleMeshes, bool isGlobalLine)
17{
18    // run OGRE ray shooting query
19    return false;
20}
21//-----------------------------------------------------------------------
22void PlatformQueryManager::ComputeFromPointVisibility(const Vector3 &point,
23                               InfoContainer<GtpVisibility::NodeInfo> *visibleNodes,
24                               InfoContainer<GtpVisibility::MeshInfo> *visibleGeometry,
25                                   InfoContainer<GtpVisibility::PatchInfo> *visiblePatches,
26                               bool relativeVisibility)
27{
28        SceneManager *sm = dynamic_cast<PlatformHierarchyInterface *>
29                (mHierarchyInterface)->GetSceneManager();
30
31        // create a camera for the point query
32        Camera *cam = sm->createCamera("PointQueryCam");       
33
34        //save old camera
35        Camera *savedCam = mViewport->getCamera();
36       
37        // --- initialise new camera
38        mViewport->setCamera(cam);
39        cam->setPosition(point);
40
41        cam->setNearClipDistance(savedCam->getNearClipDistance());
42        cam->setFarClipDistance(savedCam->getFarClipDistance());
43
44        // set frustum to 45 degrees so all the scene can be captured with 6 shots
45        cam->setAspectRatio(1.0);
46        cam->setFOVy(Radian(Math::HALF_PI));
47
48        int sign = -1;
49       
50        // ---- capture visibility from all 6 directions
51        for (int i=0; i < 6; i++)       
52        {
53                sign *= -1;
54               
55                // Print camera details
56        std::stringstream d;
57                d << "Point query camera: " + StringConverter::toString(cam->getDerivedPosition()) +
58                        " " + "O: " + StringConverter::toString(cam->getDerivedOrientation());
59                LogManager::getSingleton().logMessage(d.str());
60
61                // prevent from initialising geometry / node array again
62                if (i > 0)
63                {
64                        mWasInitialised = true;
65                }
66
67                ComputeCameraVisibility(*cam, visibleNodes, visibleGeometry, visiblePatches, relativeVisibility);
68               
69                //mViewport->getTarget()->update(); for(int j=0; j<10000000; j++)       printf("wait");
70
71                // permute directions
72                Vector3 dir(0,0,0);
73                dir[i/2] = sign;
74
75                cam->setDirection(dir);
76        }
77       
78        // reset camera
79        mViewport->setCamera(savedCam);
80}
81//-----------------------------------------------------------------------
82void PlatformQueryManager::SetViewport(Viewport *vp)
83{
84        mViewport = vp;
85}
86} // namespace Ogre
Note: See TracBrowser for help on using the repository browser.