Ignore:
Timestamp:
07/18/08 03:07:26 (16 years ago)
Author:
mattausch
Message:
 
Location:
GTP/trunk/App/Demos/Vis/FriendlyCulling
Files:
1 added
10 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/FriendlyCulling.vcproj

    r2840 r2847  
    613613                                </File> 
    614614                                <File 
     615                                        RelativePath=".\src\LODInfo.cpp" 
     616                                        > 
     617                                </File> 
     618                                <File 
    615619                                        RelativePath=".\src\Material.cpp" 
    616620                                        > 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/Readme.txt

    r2806 r2847  
    8181The project is separated into one section containing supportive code (utils), the traversal algorithms (traversal), and the basic engine classes like Camera, Geometry, Material, or RenderState (rendering).  
    8282 
     83the tool uses some free 3rd party libraries, like DevIL for the image processing, and glfont2 for the HUD (http://students.cs.byu.edu/~bfish/glfont2.php, many thanks to Brad Fish for fast antialiased text). Also thanks to Alexander Kusternig for providing me his code for the SSAO shader. 
     84 
    8385If you find any problem with the code or have any comments, please feel free to ask us at any time. 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/LODInfo.h

    r2844 r2847  
    33 
    44#include "common.h" 
     5#include "Vector3.h" 
    56 
    67 
     
    2122        /// shapes belonging to this LOD level 
    2223        ShapeContainer mShapes; 
     24 
     25 
     26        /** Has to be called each frame in order to use proper LOD level. 
     27        */ 
     28        static void InitFrame(const Vector3 &viewPoint); 
     29 
     30        static int sFrameId; 
     31        static Vector3 sViewPoint; 
    2332}; 
    2433 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderQueue.cpp

    r2845 r2847  
    144144                // assume that the incoming nodes are ordered by distance  
    145145                // => set min dist on first incoming node 
    146                 const Vector3 v = shape->GetTransformedBoundingBox().Center() - mCamera->GetPosition(); 
     146                const Vector3 v = shape->GetCenter() - mCamera->GetPosition(); 
    147147                 
    148148                const float dist = SqrMagnitude(v); 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderTraverser.cpp

    r2844 r2847  
    109109                { 
    110110                        SceneEntity *ent = entities[i]; 
    111                         ent->UpdateLODs(mCamera); 
    112                          
     111                 
    113112                        mStats.mNumRenderedTriangles += ent->CountNumTriangles(); 
    114113 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneEntity.cpp

    r2844 r2847  
    2020 
    2121SceneEntity::SceneEntity(Transform3 *trafo):  
    22 mTransform(trafo), mCurrentLODLevel(0) 
     22mTransform(trafo), mCurrentLODLevel(0), mLODLastUpdated(-1) 
    2323{ 
    2424        mBox.Initialize(); 
     
    3131 
    3232 
    33 void SceneEntity::UpdateLODs(Camera *cam) 
     33void SceneEntity::UpdateLODs(const Vector3 &viewPoint) 
    3434{ 
    35         const Vector3 pos = GetTransformedBoundingBox().Center(); 
     35        const Vector3 pos = GetCenter(); 
    3636 
    37         const float distance = SqrDistance(pos, cam->GetPosition()); 
     37        const float distance = SqrDistance(pos, viewPoint); 
    3838 
    3939        mCurrentLODLevel = 0; 
    4040 
    41         int l = (int)mLODLevels.size(); 
     41        const int l = (int)mLODLevels.size(); 
    4242 
    4343        for (int i = 0; i < l; ++ i) 
     
    6060                                                                         ShapeContainer::iterator &end) 
    6161{ 
     62        if (mLODLastUpdated != LODLevel::sFrameId) 
     63        { 
     64                mLODLastUpdated = LODLevel::sFrameId; 
     65                UpdateLODs(LODLevel::sViewPoint); 
     66        } 
     67 
    6268        start = mLODLevels[mCurrentLODLevel]->mShapes.begin();  
    6369        end = mLODLevels[mCurrentLODLevel]->mShapes.end(); 
     
    8086        ShapeContainer::iterator sit, sit_end; 
    8187 
    82         /*if (mShapes.size() > 8) 
    83         { 
    84                 sit = mShapes.begin() + 6; 
    85                 sit_end = mShapes.begin() + 6; 
    86         } 
    87         else*/ 
    88                 GetCurrentLODLevel(sit, sit_end); 
     88        GetCurrentLODLevel(sit, sit_end); 
    8989 
    90         //if (mShapes.size() > 1) 
    91                 //mShapes[0]->Render(state); 
    9290        for (; sit != sit_end; ++ sit) 
    9391        { 
     
    10199        mShapes.push_back(shape); 
    102100        mBox.Include(shape->GetBoundingBox()); 
     101 
     102        mCenter = mBox.Center(); 
    103103} 
    104104 
     
    163163} 
    164164 
     165 
     166Vector3 SceneEntity::GetCenter() const 
     167{ 
     168        Matrix4x4 *mat = mTransform->GetMatrix(); 
     169 
     170        if (!mat) 
     171                return mCenter; 
     172 
     173        return (*mat) * mCenter; 
    165174} 
     175 
     176 
     177} 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneEntity.h

    r2844 r2847  
    7474        //////////////// 
    7575 
    76         /** Internally updates current lod level. 
    77         */ 
    78         void UpdateLODs(Camera *cam); 
     76         
    7977        /** Returns shapes of specified lod level 
    8078        */ 
     
    9088        int GetNumLODLevels() const { return (int)mLODLevels.size(); } 
    9189 
     90        /** Returns transformed center point of this shape. 
     91        */ 
     92        Vector3 GetCenter() const; 
     93 
    9294protected: 
    9395 
     96        /** Internally updates current lod level. 
     97        */ 
     98        void UpdateLODs(const Vector3 &viewPoint); 
     99 
     100 
     101 
     102        /// the bounding box 
    94103        AxisAlignedBox3 mBox; 
    95104        /// transform matrix  
     
    103112 
    104113        int mCurrentLODLevel; 
     114 
     115        /// which frame the lod info was last updated 
     116        int mLODLastUpdated; 
     117 
     118        Vector3 mCenter; 
    105119}; 
    106120 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Shape.cpp

    r2844 r2847  
    1616mRenderQueueBucket(NULL) 
    1717{ 
     18        mCenter = GetBoundingBox().Center(); 
    1819} 
    1920 
     
    3031        mGeometry->Render(state); 
    3132        mParent->GetTransform()->Unload(state); 
    32  
    3333} 
    3434 
     
    6363} 
    6464 
     65 
     66Vector3 Shape::GetCenter() const 
     67{ 
     68        Matrix4x4 *mat = mParent->GetTransform()->GetMatrix(); 
     69 
     70        if (!mat) return mCenter; 
     71 
     72        return (*mat) * mCenter; 
    6573} 
     74 
     75 
     76} 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Shape.h

    r2842 r2847  
    66#include <Cg/cgGL.h> 
    77#include "common.h" 
     8#include "Vector3.h" 
    89 
    910 
     
    1617class RenderState; 
    1718class AxisAlignedBox3; 
     19class Vector3; 
    1820 
    1921struct RenderQueueBucket; 
     
    5355 
    5456        inline Material *GetMaterial() const  { return mMaterial; } 
     57        /** Returns transformed center point of this shape. 
     58        */ 
     59        Vector3 GetCenter() const; 
     60 
    5561 
    5662protected: 
     63 
     64        Vector3 mCenter; 
    5765 
    5866        Geometry *mGeometry; 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp

    r2846 r2847  
    456456        // create noise texture for ssao 
    457457        CreateNoiseTex2D(); 
     458 
    458459        // init render traverser 
    459460        ResetTraverser(); 
    460461 
    461  
    462462        visualization = new Visualization(bvh, camera, NULL, &state); 
    463463 
    464464        sceneQuery = new SceneQuery(bvh->GetBox(), traverser); 
     465 
     466        // frame time is restarted every frame 
     467        frameTimer.Start(); 
    465468 
    466469 
     
    10991102void Display()  
    11001103{        
    1101         glFlush(); 
    1102         elapsedTime = frameTimer.Elapsedms(); 
    1103  
    1104         // take time from last frame 
    1105         frameTimer.Start(); 
    1106  
    11071104        Vector3 oldPos = camera->GetPosition(); 
    11081105 
     
    11931190                 
    11941191 
     1192        LODLevel::InitFrame(camera->GetPosition()); 
     1193 
     1194 
    11951195        // bring eye modelview matrix up-to-date 
    11961196        SetupEyeView(); 
     
    12721272                if (visMode) DisplayVisualization(); 
    12731273        } 
     1274 
     1275        glFlush(); 
     1276 
     1277        const bool restart = true; 
     1278        elapsedTime = frameTimer.Elapsedms(restart); 
    12741279 
    12751280        DisplayStats(); 
Note: See TracChangeset for help on using the changeset viewer.