Ignore:
Timestamp:
09/02/08 15:29:20 (16 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

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

    r2894 r2895  
    2424using namespace std; 
    2525 
     26 
     27int BvhNode::sCurrentState = 0; 
    2628 
    2729 
     
    7577mAxis(-1),  
    7678mDepth(0),  
    77 mPlaneMask(0), 
    78 mPreferredPlane(0), 
    7979mLastRenderedFrame(-999), 
    8080mFirst(-1),  
     
    8787mIsVirtualLeaf(false) 
    8888{ 
     89        for (int i = 0; i < NUM_STATES; ++ i) 
     90        { 
     91                mPlaneMask[i] = 0; 
     92                mPreferredPlane[i]= 0; 
     93        } 
    8994} 
    9095 
     
    97102void BvhNode::ResetVisibility() 
    98103{ 
    99         mVisibility.Reset(); 
     104        for (int i = 0; i < NUM_STATES; ++ i) 
     105        { 
     106                mVisibility[i].Reset(); 
     107        } 
     108 
    100109        mLastRenderedFrame = -999; 
    101110} 
     
    301310{ 
    302311        // do the test only if necessary 
    303         if (!(node->mPlaneMask & (1 << i))) 
     312        if (!(node->mPlaneMask[BvhNode::sCurrentState] & (1 << i))) 
    304313                return true; 
    305314                         
     
    310319        { 
    311320                // outside 
    312                 node->mPreferredPlane = i; 
     321                node->mPreferredPlane[BvhNode::sCurrentState] = i; 
    313322                return false; 
    314323        } 
     
    320329        { 
    321330                // completely inside: children don't need to check against this plane no more 
    322                 node->mPlaneMask^= 1 << i; 
     331                node->mPlaneMask[BvhNode::sCurrentState] ^= 1 << i; 
    323332        } 
    324333        else  
     
    336345 
    337346        if (node->GetParent()) 
    338                 node->mPlaneMask = node->GetParent()->mPlaneMask; 
    339  
    340  
    341         //for (int i = 0; i < 6; ++ i) 
    342         //      if (!TestPlane(node, i, bIntersect)) return 0; 
    343          
     347                node->mPlaneMask[BvhNode::sCurrentState] = node->GetParent()->mPlaneMask[BvhNode::sCurrentState]; 
    344348 
    345349        //////// 
    346350        //-- apply frustum culling for the planes [mPreferredPlane - 5] 
    347351 
    348         for (int i = node->mPreferredPlane; i < 6; ++ i) 
     352        for (int i = node->mPreferredPlane[BvhNode::sCurrentState]; i < 6; ++ i) 
    349353                if (!TestPlane(node, i, bIntersect)) return 0; 
    350354         
     355 
    351356        ////////// 
    352357        //-- do the view frustum culling for the planes [0 - m_iPreferredPlane) 
    353358 
    354         for (int i = 0; i < node->mPreferredPlane; ++ i) 
     359        for (int i = 0; i < node->mPreferredPlane[BvhNode::sCurrentState]; ++ i) 
    355360                if (!TestPlane(node, i, bIntersect)) return 0; 
    356361         
     
    362367{ 
    363368        // = 0011 1111 which means that at the beginning, all six planes have to frustum culled 
    364         mRoot->mPlaneMask = 0x3f; 
     369        mRoot->mPlaneMask[BvhNode::sCurrentState] = 0x3f; 
    365370 
    366371        mCamera->CalcFrustum(sFrustum); 
Note: See TracChangeset for help on using the changeset viewer.