Changeset 2848


Ignore:
Timestamp:
07/21/08 03:12:51 (16 years ago)
Author:
mattausch
Message:
 
Location:
GTP/trunk/App/Demos/Vis/FriendlyCulling/src
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Bvh.cpp

    r2842 r2848  
    144144        mGeometry = new SceneEntity*[mGeometrySize]; 
    145145 
    146         mBox.Initialize(); 
    147  
    148146        SceneEntityContainer::const_iterator it, it_end = entities.end(); 
    149147 
     
    152150        { 
    153151                mGeometry[i] = (*it); 
    154                 //mBox.Include((*it)->GetBoundingBox()); 
    155         } 
    156  
    157         cout << "scene box: " << mBox << endl; 
     152        } 
    158153} 
    159154 
     
    799794        for (int i = node->mFirst; i <= node->mLast; ++ i) 
    800795        { 
    801                 numTriangles += mGeometry[i]->CountNumTriangles(); 
     796                numTriangles += mGeometry[i]->CountNumTriangles(0); 
    802797        } 
    803798 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/LODInfo.cpp

    r2847 r2848  
    11#include "LODInfo.h" 
    22#include "Vector3.h" 
     3#include "Shape.h" 
     4#include "Geometry.h" 
     5 
    36 
    47 
     
    1720 
    1821 
     22void LODLevel::AddShape(Shape *shape) 
     23{ 
     24        mShapes.push_back(shape); 
     25        mNumTriangles += shape->GetGeometry()->GetNumTriangles(); 
    1926} 
     27 
     28 
     29} 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/LODInfo.h

    r2847 r2848  
    1313struct LODLevel 
    1414{ 
     15        //friend class SceneEntity; 
     16 
    1517public: 
    1618         
    1719        LODLevel(float squaredDist): mSquaredDistance(squaredDist) {} 
    1820 
     21        inline float GetSquaredDistance() { return mSquaredDistance; } 
     22 
     23        inline int GetNumShapes() { return (int)mShapes.size(); } 
     24         
     25        inline int GetNumTriangles() { return mNumTriangles; } 
     26 
     27        inline Shape *GetShape(size_t i) { return mShapes[i]; } 
     28 
     29        inline ShapeContainer &GetShapes() { return mShapes; } 
     30 
     31        void AddShape(Shape *shape); 
     32 
     33 
     34        //////////////// 
     35 
     36        /** Has to be called each frame in order to use proper LOD level. 
     37        */ 
     38        static void InitFrame(const Vector3 &viewPoint); 
     39 
     40 
     41        static int sFrameId; 
     42        static Vector3 sViewPoint; 
     43 
     44 
     45 
     46protected: 
     47 
     48        ///////////////////// 
     49 
     50        float mNumTriangles; 
    1951 
    2052        /// distance of this LOD level 
     
    2254        /// shapes belonging to this LOD level 
    2355        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; 
    3256}; 
    3357 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderQueue.cpp

    r2847 r2848  
    188188                } 
    189189        } 
    190  
    191190        //Print(); 
    192191} 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderQueue.h

    r2844 r2848  
    8686        void Print(); 
    8787 
     88 
    8889        /////////// 
    8990 
    9091        RenderState *mState; 
     92         
    9193        Camera *mCamera; 
    9294        //SceneEntityContainer mEntities; 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/RenderTraverser.cpp

    r2847 r2848  
    270270                  
    271271        if (mRenderQueue->GetSize() > 0) 
     272        { 
    272273                ++ mStats.mNumBatches; 
    273  
    274         mRenderQueue->Apply(); 
    275 } 
    276  
    277  
    278 } 
     274                mRenderQueue->Apply(); 
     275        } 
     276} 
     277 
     278 
     279} 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/ResourceManager.cpp

    r2846 r2848  
    9191 
    9292                        sceneGeom->AddShape(shape); 
    93                         lodLevel->mShapes.push_back(shape); 
     93                        lodLevel->AddShape(shape); 
    9494                } 
    9595 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneEntity.cpp

    r2847 r2848  
    4545                LODLevel *lod = mLODLevels[i]; 
    4646 
    47                 if (lod->mSquaredDistance > distance) 
     47                if (lod->GetSquaredDistance() > distance) 
    4848                        break; 
    4949 
    5050                mCurrentLODLevel = i; 
    5151        } 
     52} 
    5253 
    53         /*if (mLODLevels.size() > 1) 
     54 
     55int SceneEntity::GetCurrentLODLevel() 
     56{ 
     57        if (mLODLastUpdated != LODLevel::sFrameId) 
    5458        { 
    55                 Debug << "dist: " << distance << " numshapes: " << mLODLevels[mCurrentLODLevel]->mShapes.size() << " lod: " << mCurrentLODLevel << " of " << mLODLevels.size() << endl; 
    56         }*/ 
     59                mLODLastUpdated = LODLevel::sFrameId; 
     60                UpdateLODs(LODLevel::sViewPoint); 
     61        } 
     62 
     63        return mCurrentLODLevel; 
    5764} 
     65 
    5866 
    5967void SceneEntity::GetCurrentLODLevel(ShapeContainer::iterator &start,  
     
    6674        } 
    6775 
    68         start = mLODLevels[mCurrentLODLevel]->mShapes.begin();  
    69         end = mLODLevels[mCurrentLODLevel]->mShapes.end(); 
     76        start = mLODLevels[mCurrentLODLevel]->GetShapes().begin();  
     77        end   = mLODLevels[mCurrentLODLevel]->GetShapes().end(); 
    7078} 
    7179 
     
    7785        LODLevel *lod = mLODLevels[level]; 
    7886 
    79         start = lod->mShapes.begin(); 
    80         end = lod->mShapes.end(); 
     87        start = lod->GetShapes().begin(); 
     88        end = lod->GetShapes().end(); 
    8189} 
    8290 
     
    130138        if (lodLevel == -1) 
    131139        { 
    132                 GetCurrentLODLevel(sit, sit_end); 
    133         } 
    134         else 
    135         { 
    136                 GetLODLevel(lodLevel, sit, sit_end); 
     140                lodLevel = GetCurrentLODLevel(); 
    137141        } 
    138142 
    139  
    140         for (; sit != sit_end; ++ sit) 
    141         { 
    142                 numTriangles += (*sit)->GetGeometry()->GetNumTriangles(); 
    143         } 
    144  
    145         return numTriangles; 
     143        return mLODLevels[lodLevel]->GetNumTriangles(); 
    146144} 
    147145 
     
    168166        Matrix4x4 *mat = mTransform->GetMatrix(); 
    169167 
    170         if (!mat) 
    171                 return mCenter; 
     168        if (!mat) return mCenter; 
    172169 
    173170        return (*mat) * mCenter; 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneEntity.h

    r2847 r2848  
    6262                with 0 being the highest or the current lod level (if the argument is -1). 
    6363        */ 
    64         int CountNumTriangles(int lodLevel = 0); 
     64        int CountNumTriangles(int lodLevel = -1); 
    6565        /** Returns the bounding box. 
    6666        */ 
     
    8787        */ 
    8888        int GetNumLODLevels() const { return (int)mLODLevels.size(); } 
    89  
    9089        /** Returns transformed center point of this shape. 
    9190        */ 
    9291        Vector3 GetCenter() const; 
     92 
     93 
    9394 
    9495protected: 
     
    9798        */ 
    9899        void UpdateLODs(const Vector3 &viewPoint); 
    99  
     100        /** Returns updated index of current lod level. 
     101        */ 
     102        int GetCurrentLODLevel(); 
    100103 
    101104 
     
    112115 
    113116        int mCurrentLODLevel; 
    114  
    115117        /// which frame the lod info was last updated 
    116118        int mLODLastUpdated; 
    117  
     119        /// the center of gravity of this scene entity 
    118120        Vector3 mCenter; 
    119121}; 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneQuery.cpp

    r2838 r2848  
    77#include <IL/il.h> 
    88#include <assert.h> 
    9 #include "RenderTexture.h" 
     9//#include "RenderTexture.h" 
    1010 
    1111 
    1212using namespace std; 
    1313 
    14 static int texWidth = 2048; 
    15 static int texHeight = 2048; 
     14const static int texWidth = 2048; 
     15const static int texHeight = 2048; 
    1616 
    1717 
     
    107107        { 
    108108                // temporal smoothing of depth values 
    109                 const float x = 0.5f; 
     109                const float x = .5f; 
    110110                depth = d * x + depth * (1.0f - x); 
    111111 
     
    131131 
    132132        orthoCam->SetNear(0.0f); 
    133         orthoCam->Yaw(-M_PI * 0.5f); 
     133        orthoCam->Yaw(M_PI * 0.5f); 
    134134 
    135135        Vector3 pos = Vector3(mSceneBox.Center().x, mSceneBox.Center().y, mSceneBox.Max().z); 
     
    165165                glPushMatrix(); 
    166166 
    167                 glOrtho(-xlen, xlen, -ylen, ylen, 0.0f, mSceneBox.Size().z);  
     167                glOrtho(+xlen, -xlen, ylen, -ylen, 0.0f, mSceneBox.Size().z);  
    168168 
    169169                glMatrixMode(GL_MODELVIEW); 
     
    185185 
    186186        GrabDepthBuffer(mDepth, depthTexture); 
    187         //ExportDepthBuffer(mDepth); 
    188         //PrintGLerror("grab"); 
     187        ExportDepthBuffer(mDepth); 
     188        PrintGLerror("grab"); 
    189189 
    190190        DEL_PTR(depthTexture); 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SceneQuery.h

    r2843 r2848  
    2121 
    2222        ~SceneQuery() { DEL_ARRAY_PTR(mDepth); } 
    23  
    2423        /** Calculates intersection of vertical ray at position pt.x, pt.y and  
    2524            stores the intersection point if valid. returns true if the intersection  
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/Shape.h

    r2847 r2848  
    5353        */ 
    5454        AxisAlignedBox3 GetTransformedBoundingBox() const; 
    55  
     55        /** Returns material of this shape. 
     56        */ 
    5657        inline Material *GetMaterial() const  { return mMaterial; } 
    5758        /** Returns transformed center point of this shape. 
     
    6768        Material *mMaterial; 
    6869        SceneEntity *mParent; 
    69  
    7070        /// pointer to the renderqueue bucket this entity belongs to 
    7171        RenderQueueBucket *mRenderQueueBucket; 
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp

    r2847 r2848  
    20222022        bool validIntersect = sceneQuery->CalcIntersection(playerPos); 
    20232023 
    2024         if (validIntersect && 
    2025                 (( playerPos.z - oldPos.z) < bvh->GetBox().Size(2) * 1e-1f)) 
     2024        if (validIntersect )  
     2025                // && ((playerPos.z - oldPos.z) < bvh->GetBox().Size(2) * 1e-1f)) 
    20262026        { 
    20272027                camera->SetPosition(playerPos); 
Note: See TracChangeset for help on using the changeset viewer.