Ignore:
Timestamp:
07/04/05 17:57:51 (19 years ago)
Author:
mattausch
Message:

added item buffer queries.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/Ogre/src/OgreItemBufferQueryManager.cpp

    r153 r154  
    88//-----------------------------------------------------------------------  
    99ItemBufferQueryManager::ItemBufferQueryManager(PlatformHierarchyInterface *hierarchyInterface, Viewport *vp): 
    10 PlatformQueryManager(hierarchyInterface, vp), mWasInitialised(false) 
     10PlatformQueryManager(hierarchyInterface, vp) 
    1111{ 
    1212} 
     
    2323                            bool relativeVisibility) 
    2424{ 
    25         // initialise item buffer if necessary 
     25        // initialise item buffer (if not already initialised) 
    2626        InitItemBuffer(visibleNodes, visibleGeometry); 
    2727 
     
    4545        sm->setOption("UseItemBuffer", &useItemBuffer); 
    4646         
    47         // clear background with black 
     47        // clear background with black (i.e., not a valid item id) 
    4848        ColourValue bg = mViewport->getBackgroundColour(); 
    4949        mViewport->setBackgroundColour(ColourValue(0, 0, 0, 0)); 
     
    7070        uchar *buf = mViewport->getTarget()->getBufferContents(dimx, dimy); 
    7171 
     72         
    7273        // loop through frame buffer & collect visible pixels 
    7374        for (int idx = 0; idx < dimy * dimx * 3; idx += 3) 
    7475        { 
     76                // -- decode color code to receive id 
    7577                int id = buf[idx] << 16; 
    7678                id += buf[idx + 1] << 8; 
    7779                id += buf[idx + 2]; 
    7880 
    79                 // if valid id <= add visibility 
    80                 if ((id >= 0) && (id < (int)visibleGeometry->size())) 
     81                // if valid id <= add visibility (id values start at 1 
     82                if ((id > 0) && (id < (int)visibleGeometry->size())) 
    8183                { 
    8284                        ((*visibleGeometry)[id]).AddVisibility(1, 1); 
    8385                } 
    84         /*      else 
    85                 {  
    86                         std::stringstream d;  
    87                         d << "id: " << id << ", buf 1: " << (int)buf[idx] << ", buf 2: " << (int)buf[idx + 1] << ", buf 3: " << (int)buf[idx + 2]; 
    88                         LogManager::getSingleton().logMessage(d.str()); 
    89                 }*/ 
     86                /*else {        std::stringstream d;  
     87                        d << "adding pixel to geometry with id: " << id << ", buf 1: " << (int)buf[idx] << ", buf 2: " << (int)buf[idx + 1] << ", buf 3: " << (int)buf[idx + 2]; 
     88                        LogManager::getSingleton().logMessage(d.str()); }*/ 
    9089        } 
    9190 
     
    104103        mWasInitialised = true; 
    105104 
    106         SceneManager::EntityIterator it = dynamic_cast<PlatformHierarchyInterface *>(mHierarchyInterface)-> 
     105        SceneManager::EntityIterator it =  
     106                dynamic_cast<PlatformHierarchyInterface *>(mHierarchyInterface)-> 
    107107                GetSceneManager()->getEntityIterator(); 
    108108 
    109109        // TODO: make this more efficient 
    110110        visibleGeometry->clear(); 
     111        visibleNodes->clear(); 
    111112 
    112113        while (it.hasMoreElements()) 
     
    115116        } 
    116117} 
    117 //----------------------------------------------------------------------- 
    118 void ItemBufferQueryManager::ComputeFromPointVisibility(const Vector3 &point, 
    119                                InfoContainer<GtpVisibility::NodeInfo> *visibleNodes, 
    120                                InfoContainer<GtpVisibility::MeshInfo> *visibleGeometry, 
    121                                bool relativeVisibility) 
    122 { 
    123         SceneManager *sm = dynamic_cast<PlatformHierarchyInterface *> 
    124                 (mHierarchyInterface)->GetSceneManager(); 
    125  
    126         Camera *cam = sm->createCamera("PointQueryCam");         
    127  
    128         //save old camera 
    129         Camera *savedCam = mViewport->getCamera(); 
    130          
    131         // --- initialise new camera 
    132         mViewport->setCamera(cam); 
    133         cam->setPosition(point); 
    134  
    135         cam->setNearClipDistance(savedCam->getNearClipDistance()); 
    136         cam->setFarClipDistance(savedCam->getFarClipDistance()); 
    137  
    138         // set frustum to 45 degrees so all the scene can be captured with 6 shots 
    139         cam->setAspectRatio(1.0); 
    140         cam->setFOVy(Radian(Math::HALF_PI)); 
    141  
    142         int sign = -1; 
    143          
    144         // ---- capture visibility from all 6 directions 
    145         for (int i=0; i < 6; i++)        
    146         { 
    147                 sign *= -1; 
    148                  
    149                 // Print camera details 
    150         std::stringstream d; 
    151                 d << "Point query camera: " + StringConverter::toString(cam->getDerivedPosition()) +  
    152                         " " + "O: " + StringConverter::toString(cam->getDerivedOrientation()); 
    153                 LogManager::getSingleton().logMessage(d.str()); 
    154  
    155                 // prevent from initialising array again 
    156                 if (i > 0) 
    157                         mWasInitialised = true; 
    158                  
    159                 // compute camera visibility for this direction 
    160                 ComputeCameraVisibility(*cam, visibleNodes, visibleGeometry, relativeVisibility); 
    161  
    162                 //mViewport->getTarget()->update(); for(int j=0; j<10000000; j++)       printf("wait"); // HACK: DISPLAY CAMERA VIEW 
    163  
    164                 // --- permute directions 
    165                 Vector3 dir(0,0,0); 
    166                 dir[i/2] = sign; 
    167  
    168                 cam->setDirection(dir); 
    169         } 
    170          
    171         // reset camera 
    172         mViewport->setCamera(savedCam); 
    173 } 
    174  
    175118} // namespace Ogre 
Note: See TracChangeset for help on using the changeset viewer.