Ignore:
Timestamp:
02/21/08 18:10:24 (16 years ago)
Author:
mattausch
Message:

compiling under release internal

File:
1 edited

Legend:

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

    r2633 r2643  
    1212#include "BvHierarchy.h" 
    1313#include "Polygon3.h" 
     14#include "IntersectableWrapper.h" 
     15 
    1416 
    1517 
     
    1820   
    1921#define GVS_DEBUG 0 
     22static ObjectContainer myobjects; 
    2023 
    2124struct VizStruct 
     
    3740mCurrentViewCell(NULL), 
    3841mCurrentViewPoint(Vector3(0.0f, 0.0f, 0.0f)) 
    39 //,mGenericStats(0) 
    4042{ 
    4143        Environment::GetSingleton()->GetIntValue("GvsPreprocessor.totalSamples", mTotalSamples); 
     
    7577 
    7678        mGvsStats.Reset(); 
     79 
     80        mGenericStats = 0; 
     81        mGenericStats2 = 0; 
    7782} 
    7883 
     
    184189                Intersectable *obj = ray.mTerminationObject; 
    185190 
    186                 if (!obj->mCounter) 
     191                if (obj->mCounter < 2) 
    187192                { 
    188                         obj->mCounter = 1; 
     193                        obj->mCounter += 2; 
    189194                        mTrianglePvs.push_back(obj); 
    190195                 
     196                        mGenericStats = mTrianglePvs.size(); 
     197 
    191198                        // if using kd pvs, exchange the triangle with the node in the pvs 
    192199                        if (mUseKdPvs) 
     
    199206                                        KdIntersectable *kdInt = mKdTree->GetOrCreateKdIntersectable(node); 
    200207                                        mCurrentViewCell->GetPvs().AddSampleDirty(kdInt, 1.0f); 
     208                                        //mCurrentViewCell->GetPvs().AddSampleDirtyCheck(kdInt, 1.0f); 
     209                                         
    201210                                        mViewCellsManager->UpdateStatsForViewCell(mCurrentViewCell, kdInt); 
     211                                        myobjects.clear(); 
     212                                        mKdTree->CollectObjects(node, myobjects); 
     213 
     214                                        // account for kd object pvs 
     215                                        ObjectContainer::const_iterator oit, oit_end = myobjects.end(); 
     216 
     217                                        for (oit = myobjects.begin(); oit != oit_end; ++ oit) 
     218                                        { 
     219                                                TriangleIntersectable *triObj = static_cast<TriangleIntersectable *>(*oit); 
     220 
     221                                                if ((triObj->mCounter != 1) && (triObj->mCounter != 3)) 
     222                                                { 
     223                                                        ++ triObj->mCounter; 
     224                                                        ++ mGenericStats2; 
     225                                                } 
     226                                        } 
    202227                                }                        
    203228                        } 
    204                          
     229 
    205230                        result = true; 
    206231                } 
     
    755780 
    756781        mGvsStats.mPerViewCellSamples = 0; 
     782 
    757783        int oldContribution = mGvsStats.mTotalContribution; 
    758784        int passSamples = 0; 
    759  
    760785        mGenericStats = 0; 
     786        mGenericStats2 = 0; 
    761787 
    762788        //while (mGvsStats.mPerViewCellSamples < mTotalSamples)  
    763         while (1)  
     789        while (1) 
    764790        { 
    765791                mRayCaster->InitPass(); 
     
    788814                        cout << "contribution=" << mGvsStats.mPassContribution << " (of " << mMinContribution << ")" << endl; 
    789815 
    790                         //mGenericStats = GvsStats.mGvsStats.mPassContribution; 
     816                        //mGenericStats = mGvsStats.mPassContribution; 
    791817 
    792818                        // termination criterium 
     
    865891        AxisAlignedBox3 box = mCurrentViewCell->GetMesh()->mBox; 
    866892         
    867         vector<KdLeaf *> leaves; 
    868         mKdTree->GetBoxIntersections(box, leaves); 
    869  
    870         vector<KdLeaf *>::const_iterator lit, lit_end = leaves.end(); 
    871  
    872         for (lit = leaves.begin(); lit != leaves.end(); ++ lit) 
    873         { 
    874         KdLeaf *leaf = *lit; 
     893        //vector<KdLeaf *> leaves; 
     894        //mKdTree->GetBoxIntersections(box, leaves); 
     895 
     896        ObjectContainer kdobjects; 
     897        mKdTree->CollectKdObjects(box, kdobjects); 
     898        //vector<KdLeaf *>::const_iterator lit, lit_end = leaves.end(); 
     899        //for (lit = leaves.begin(); lit != lit_end; ++ lit) 
     900        ObjectContainer::const_iterator oit, oit_end = kdobjects.end(); 
     901        for (oit = kdobjects.begin(); oit != oit_end; ++ oit) 
     902        { 
     903        // add to kdnode pvs 
     904                KdIntersectable *kdInt = static_cast<KdIntersectable *>(*oit); 
    875905                 
    876                 // add to kdnode pvs 
    877                 if (mUseKdPvs) 
    878                 { 
    879                         leaf->Mail(); 
    880                         KdIntersectable *kdInt = mKdTree->GetOrCreateKdIntersectable(leaf); 
    881                         mCurrentViewCell->GetPvs().AddSampleDirty(kdInt, 1.0f); 
    882          
    883                         mViewCellsManager->UpdateStatsForViewCell(mCurrentViewCell, kdInt); 
    884                 } 
    885  
    886                 ObjectContainer::const_iterator oit, oit_end = leaf->mObjects.end(); 
    887  
    888                 for (oit = leaf->mObjects.begin(); oit != oit_end; ++ oit) 
     906                //mCurrentViewCell->GetPvs().AddSampleDirty(kdInt, 1.0f); 
     907                mCurrentViewCell->GetPvs().AddSampleDirtyCheck(kdInt, 1.0f); 
     908                mViewCellsManager->UpdateStatsForViewCell(mCurrentViewCell, kdInt); 
     909 
     910                myobjects.clear(); 
     911                mKdTree->CollectObjects(kdInt->GetItem(), myobjects); 
     912 
     913                // account for kd object pvs 
     914                ObjectContainer::const_iterator oit, oit_end = myobjects.end(); 
     915 
     916                for (oit = myobjects.begin(); oit != oit_end; ++ oit) 
    889917                { 
    890918                        TriangleIntersectable *triObj = static_cast<TriangleIntersectable *>(*oit); 
    891  
     919             
     920                        // account for the overall pvs 
     921                        if ((triObj->mCounter != 1) && (triObj->mCounter != 3)) 
     922                        { 
     923                                ++ triObj->mCounter; 
     924                                ++ mGenericStats2; 
     925                        } 
     926             
     927                        // the triangle itself intersects 
    892928                        if (box.Intersects(triObj->GetItem())) 
    893929                        { 
    894                                 if (!triObj->mCounter) 
     930                                if ((triObj->mCounter < 2)) 
    895931                                { 
    896                                         triObj->mCounter = 1; 
     932                                        triObj->mCounter += 2; 
     933 
    897934                                        mTrianglePvs.push_back(triObj); 
     935                                        mGenericStats = mTrianglePvs.size(); 
    898936                                } 
    899                         } 
     937                        }                        
    900938                } 
    901939        } 
    902940} 
     941 
    903942 
    904943 
     
    929968                        continue; 
    930969 
    931         //ViewCell *vc = mViewCellsManager->GetViewCell(mCurrentViewPoint); 
    932970        ViewCell *vc = mViewCellsManager->GetViewCell(mRendererWidget->GetViewPoint()); 
    933971 
    934                 //cout << "v " << mRendererWidget->GetViewPoint() << " "; 
    935  
    936972                // no valid view cell or view cell already computed 
    937                 if (!vc || !vc->GetPvs().Empty()) 
     973                if (!vc || !vc->GetPvs().Empty() || !mRendererWidget->mComputeGVS) 
    938974                        continue; 
    939975 
    940                 //cout << "computing new view cell: " << vc->GetId() << endl; 
    941  
     976                mRendererWidget->mComputeGVS = false; 
    942977                // hack: reset counters 
    943978                ObjectContainer::const_iterator oit, oit_end = mObjects.end(); 
     
    950985        } 
    951986} 
    952  
    953  
    954987 
    955988 
     
    9991032 
    10001033        BvhLeaf::NewMail(); 
    1001         //KdNode::NewMail(); 
    10021034 
    10031035        ObjectContainer::const_iterator oit, oit_end = mTrianglePvs.end(); 
     
    12091241{ 
    12101242        mCurrentViewCell = vc; 
    1211  
    1212         if (mUseKdPvs) 
    1213         { 
    1214                 KdNode::NewMail(); 
    1215                 //mKdPvs.clear(); 
    1216         } 
     1243        KdNode::NewMail(); 
    12171244 
    12181245        long startTime = GetTime(); 
    12191246        cout << "\n***********************\n"  
    1220                 << "processing view cell " << mProcessedViewCells  
     1247                << "computing view cell " << mProcessedViewCells  
    12211248                << " (id: " << mCurrentViewCell->GetId() << ")" << endl; 
    12221249 
     
    12561283                        mCurrentViewCell->GetPvs().AddSampleDirty(*it, 1.0f); 
    12571284                */ 
    1258                 mGvsStats.mPerViewCellPvs = mCurrentViewCell->GetPvs().GetSize();; 
     1285                mGvsStats.mPerViewCellPvs = mCurrentViewCell->GetPvs().GetSize(); 
     1286 
     1287                cout << "pvs cost: " << mCurrentViewCell->GetPvs().EvalPvsCost() << " pvs tri: " << mGenericStats2 << endl; 
    12591288        } 
    12601289 
     
    12791308 
    12801309        mTrianglePvs.clear(); 
    1281 #if 0 
    1282         if (GVS_DEBUG) 
    1283         { 
    1284                 //VisualizeViewCell(mCurrentViewCell); 
    1285                 VisualizeViewCell(objectPvs); 
    1286                 CLEAR_CONTAINER(mVssRays); 
    1287         } 
    1288         cout << "finished" << endl; 
    1289  
    1290         if (mEvaluatePixelError || mExportVisibility) 
    1291         { 
    1292                 StorePvs(objectPvs); 
    1293         } 
    1294 #endif 
    1295 } 
    1296  
    1297 } 
     1310} 
     1311 
     1312} 
Note: See TracChangeset for help on using the changeset viewer.