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

Legend:

Unmodified
Added
Removed
  • 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.