Ignore:
Timestamp:
05/26/08 01:05:56 (16 years ago)
Author:
mattausch
Message:

sheduling dynamic object only when necessary

File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/Preprocessing/src/Preprocessor.cpp

    r2708 r2709  
    5858mGlobalLinesRenderer(NULL), 
    5959mUseHwGlobalLines(false), 
    60 mTotalRaysCast(0) 
     60mTotalRaysCast(0), 
     61mSynchronize(false) 
    6162{ 
    6263        Environment::GetSingleton()->GetBoolValue("Preprocessor.useGlRenderer", mUseGlRenderer); 
     
    665666                // load scene objects which are the entities used as pvs entries 
    666667                ObjectContainer pvsObjects; 
    667                 if (0) LoadObjects(buf, pvsObjects, mObjects); 
     668                if (1) LoadObjects(buf, pvsObjects, mObjects); 
    668669 
    669670                const bool finalizeViewCells = true; 
     
    746747 
    747748        mViewCellsManager->SetRenderer(mRenderSimulator); 
    748          
    749749        mViewCellsManager->SetPreprocessor(this); 
    750750 
     
    838838         
    839839    Vector3 origin, termination; 
    840         // HACK: needed only for lower_bound algorithm to find the  
    841         // intersected objects 
     840        // HACK: needed only for lower_bound algorithm to find the intersected objects 
    842841        MeshInstance sObj(NULL); 
    843842        MeshInstance tObj(NULL); 
     
    14521451Preprocessor::ComputeRenderError() 
    14531452{ 
    1454   // compute rendering error 
    1455          
     1453  // compute rendering error     
    14561454  if (renderer && renderer->mPvsStatFrames) { 
    14571455         
     
    15961594        mDynamicObjects.push_back(leaf); 
    15971595 
    1598         // add to scene graph 
    1599         mSceneGraph->GetRoot()->mChildren.push_back(leaf); 
    1600  
    1601         if (mRayCaster) 
    1602                 mRayCaster->AddDynamicObjecs(leaf->mGeometry, leaf->GetTransformation()); 
     1596        // tell ray caster to update 
     1597        ScheduleUpdateDynamicObjects(); 
     1598 
     1599        if (0)  
     1600        { 
     1601                // add to scene graph 
     1602                mSceneGraph->GetRoot()->mChildren.push_back(leaf); 
     1603                // add to ray caster 
     1604                if (mRayCaster) 
     1605                        mRayCaster->AddDynamicObjecs(leaf->mGeometry, leaf->GetTransformation()); 
     1606        } 
    16031607        // $$ JB in order to compile 
    16041608        //return leaf; 
     
    16461650 
    16471651                leaf->UpdateBox(); 
     1652 
     1653                float offs = -leaf->GetOriginalBox().Min().y; 
     1654 
     1655                // scale so pivot is always on bottom 
     1656                for (it = leaf->mGeometry.begin(); it != it_end; ++ it) 
     1657                { 
     1658                        TriangleIntersectable *tri = static_cast<TriangleIntersectable *>(*it); 
     1659 
     1660                        Triangle3 t = tri->GetItem(); 
     1661 
     1662                        // hack: scale object appropriately 
     1663                        t.mVertices[0].y += offs; 
     1664                        t.mVertices[1].y += offs; 
     1665                        t.mVertices[2].y += offs; 
     1666 
     1667                        tri->SetItem(t); 
     1668                } 
     1669 
     1670                leaf->UpdateBox(); 
     1671 
     1672 
    16481673                cout<<"Dynamic object loaded successfully: " << leaf->GetBox() << endl; 
    16491674 
     
    17091734 
    17101735 
     1736void Preprocessor::ObjectRemoved(SceneGraphLeaf *leaf) 
     1737{ 
     1738        ObjectMoved(leaf); 
     1739} 
     1740 
     1741 
    17111742void Preprocessor::UpdateDynamicObjects() 
    17121743{ 
     
    17161747                preprocessor->mRayCaster->DeleteDynamicObjects(); 
    17171748         
    1718                 for (size_t i=0; i < mDynamicObjects.size(); ++ i)  
     1749                for (size_t i = 0; i < mDynamicObjects.size(); ++ i)  
    17191750                { 
    17201751                        SceneGraphLeaf *l = mDynamicObjects[i]; 
    1721                    
    1722                         cout<<"Updating dynamic objects in ray caster..."<<endl; 
    1723                    
    1724                         mRayCaster->AddDynamicObjecs(l->mGeometry, l->GetTransformation()); 
    1725                          
    1726                         cout<<"done."<<endl; 
    1727                          
    1728                         cerr<<"Updating affected PVSs..."<<endl; 
    1729                         preprocessor->ObjectMoved(l); 
    1730                         cerr<<"done."<<endl;       
     1752 
     1753                        UpdateObjectInRayCaster(l); 
     1754 
     1755                        if (l->HasChanged()) 
     1756                        { 
     1757                                cout<<"Updating affected PVSs..."<<endl; 
     1758                                preprocessor->ObjectMoved(l); 
     1759                                cout<<"done."<<endl;     
     1760                                l->SetHasChanged(false); 
     1761                        } 
    17311762                } 
    17321763         
    17331764                mUpdateDynamicObjects = false; 
    1734          
    17351765        } 
    17361766} 
     
    17391769void Preprocessor::ScheduleUpdateDynamicObjects() 
    17401770{ 
    1741                 mUpdateDynamicObjects = true; 
    1742 } 
    1743  
    1744  
    1745 } 
     1771        mUpdateDynamicObjects = true; 
     1772} 
     1773 
     1774 
     1775void Preprocessor::UpdateObjectInRayCaster(SceneGraphLeaf *l) 
     1776{ 
     1777        cout<<"Updating dynamic objects in ray caster..."<<endl; 
     1778 
     1779        mRayCaster->AddDynamicObjecs(l->mGeometry, l->GetTransformation()); 
     1780        cout<<"done."<<endl; 
     1781} 
     1782 
     1783} 
Note: See TracChangeset for help on using the changeset viewer.