Ignore:
Timestamp:
09/11/08 17:31:36 (16 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

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

    r2930 r2931  
    100100static int winHeight = 768; 
    101101 
     102const float shadowSize = 4096; 
    102103 
    103104static float winAspectRatio = 1.0f; 
     
    179180 
    180181static Matrix4x4 matProjectionView = IdentityMatrix(); 
     182 
     183bool renderLightView = false; 
     184 
    181185 
    182186 
     
    873877         
    874878 
    875         // render without shading 
     879 
     880        if ((!shadowMap || !shadowTraverser) && (showShadowMap || renderLightView)) 
     881        { 
     882                if (!shadowMap) 
     883                        shadowMap = new ShadowMap(light, shadowSize, bvh->GetBox(), camera); 
     884 
     885                if (!shadowTraverser) 
     886                        shadowTraverser = CreateTraverser(shadowMap->GetShadowCamera()); 
     887 
     888        } 
     889 
     890        // hack 
     891        int oldRenderType = renderType; 
     892 
     893        if (renderLightView) 
     894                renderType = RenderState::FIXED; 
     895 
     896 
     897        // render with the specified method (forward rendering, forward + depth, deferred) 
    876898        switch (renderType) 
    877899        { 
     
    909931        case RenderState::DEFERRED: 
    910932 
    911                 if (showShadowMap)// && shadowChanged) 
     933                if (showShadowMap && !renderLightView)// && shadowChanged) 
    912934                { 
    913                         if (!shadowMap) 
    914                         { 
    915                                 const float shadowSize = 4096; 
    916                                 //const float shadowSize = 512; 
    917                                 shadowMap = new ShadowMap(light, shadowSize, bvh->GetBox(), camera); 
    918                         } 
    919  
    920                         // change CHC state (must be done for each change of camera) 
    921                         BvhNode::SetCurrentState(1); 
    922  
    923                         if (!shadowTraverser) 
    924                                 shadowTraverser = CreateTraverser(shadowMap->GetShadowCamera()); 
    925  
    926935                        shadowChanged = false; 
    927  
    928 #if 0 
    929                         state.SetRenderType(RenderState::DEFERRED); 
    930  
    931                         fbo->Bind(); 
    932  
    933                         glPushAttrib(GL_VIEWPORT_BIT); 
    934                         glViewport(0, 0, texWidth, texHeight); 
    935  
    936                         cgGLEnableProfile(RenderState::sCgFragmentProfile); 
    937                         cgGLBindProgram(RenderState::sCgMrtFragmentProgram); 
    938  
    939                         cgGLEnableProfile(RenderState::sCgVertexProfile); 
    940                         cgGLBindProgram(sCgMrtVertexProgram); 
    941 #else 
    942936 
    943937                        cgGLDisableProfile(RenderState::sCgFragmentProfile); 
     
    945939 
    946940                        state.SetRenderType(RenderState::DEPTH_PASS); 
    947 #endif 
     941                         
     942                        // change CHC++ set of state variables (must be done for each change of camera because 
     943                        // otherwise the temporal coherency is broken 
     944                        BvhNode::SetCurrentState(1); 
     945 
    948946                        // the scene is rendered withouth any shading    
    949947                        shadowMap->ComputeShadowMap(shadowTraverser, matProjectionView); 
     
    10021000        glLightfv(GL_LIGHT1, GL_POSITION, position1); 
    10031001 
    1004         // actually render the scene geometry using the specified algorithm 
    1005         traverser->RenderScene(); 
     1002 
     1003        if (renderLightView) 
     1004        { 
     1005                // change CHC++ set of state variables (must be done for each change of camera because 
     1006                // otherwise the temporal coherency is broken 
     1007                BvhNode::SetCurrentState(1); 
     1008                shadowMap->RenderShadowView(shadowTraverser, matProjectionView); 
     1009                BvhNode::SetCurrentState(0); 
     1010        } 
     1011        else 
     1012                // actually render the scene geometry using the specified algorithm 
     1013                traverser->RenderScene(); 
    10061014 
    10071015 
     
    10681076        glDisableClientState(GL_VERTEX_ARRAY); 
    10691077        glDisableClientState(GL_NORMAL_ARRAY); 
    1070  
     1078         
     1079        renderType = oldRenderType; 
    10711080 
    10721081 
     
    11141123                traverser = CreateTraverser(camera); 
    11151124 
    1116                 if (shadowTraverser && shadowMap)  
     1125                if (shadowTraverser) 
    11171126                { 
     1127                        // shadow traverser has to be recomputed (this is done on demand) 
    11181128                        DEL_PTR(shadowTraverser); 
    1119                         //shadowTraverser = CreateTraverser(shadowMap->GetShadowCamera()); 
    11201129                } 
    11211130 
     
    12021211        case 'a': 
    12031212        case 'A': 
    1204                         leftKeyPressed = true; 
     1213                leftKeyPressed = true; 
    12051214                break; 
    12061215        case 'd': 
    12071216        case 'D': 
    1208                         rightKeyPressed = true; 
     1217                rightKeyPressed = true; 
    12091218                break; 
    12101219        case 'w': 
    12111220        case 'W': 
    1212                         upKeyPressed = true; 
     1221                upKeyPressed = true; 
    12131222                break; 
    12141223        case 's': 
    12151224        case 'S': 
    1216                         downKeyPressed = true; 
     1225                downKeyPressed = true; 
    12171226                break; 
    12181227        case 'r': 
    12191228        case 'R': 
    1220                 { 
    1221                         useRenderQueue = !useRenderQueue; 
    1222                         traverser->SetUseRenderQueue(useRenderQueue); 
    1223                 } 
     1229                useRenderQueue = !useRenderQueue; 
     1230                traverser->SetUseRenderQueue(useRenderQueue); 
     1231                 
    12241232                break; 
    12251233        case 'b': 
    12261234        case 'B': 
    1227                 { 
    1228                         useTightBounds = !useTightBounds; 
    1229                         traverser->SetUseTightBounds(useTightBounds); 
    1230                 } 
     1235                useTightBounds = !useTightBounds; 
     1236                traverser->SetUseTightBounds(useTightBounds); 
     1237                break; 
     1238        case 'l': 
     1239        case 'L': 
     1240                renderLightView = !renderLightView; 
    12311241                break; 
    12321242        default: 
Note: See TracChangeset for help on using the changeset viewer.