Ignore:
Timestamp:
12/01/06 19:01:08 (18 years ago)
Author:
gumbau
Message:

Added shadows to the terrain

Location:
GTP/trunk/App/Demos/Geom/Demo_LodTrees
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Geom/Demo_LodTrees/Demo_LodTrees.vcproj

    r1321 r1840  
    2121                                Optimization="0" 
    2222                                ImproveFloatingPointConsistency="TRUE" 
    23                                 AdditionalIncludeDirectories="..\OgreStuff\include;..\..\..\..\Lib\Geom\shared\GTGeometry\include" 
     23                                AdditionalIncludeDirectories="..\OgreStuff\include;..\..\..\..\Lib\Geom\shared\GTGeometry\include;..\OgreStuff\include\opt" 
    2424                                PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS" 
    2525                                MinimalRebuild="TRUE" 
     
    3535                        <Tool 
    3636                                Name="VCLinkerTool" 
    37                                 AdditionalDependencies="OgreMain_d.lib GTGeometry_d.lib" 
     37                                AdditionalDependencies="OgreMain_d.lib GTGeometry_d.lib Plugin_OctreeSceneManager.lib" 
    3838                                OutputFile="$(OutDir)/Demo_LodTrees.exe" 
    3939                                LinkIncremental="2" 
    40                                 AdditionalLibraryDirectories="..\OgreStuff\lib;..\..\..\..\Lib\Geom\shared\GTGeometry\build\Debug\" 
     40                                AdditionalLibraryDirectories="..\OgreStuff\lib;..\..\..\..\Lib\Geom\shared\GTGeometry\build\Debug\;..\OgreStuff\lib\opt\debug\" 
    4141                                GenerateDebugInformation="TRUE" 
    4242                                ProgramDatabaseFile="$(OutDir)/Demo_LodTrees.pdb" 
     
    4848                                Name="VCPostBuildEventTool" 
    4949                                CommandLine="xcopy /Y ..\OgreStuff\bin\Debug\*.dll build\Debug 
    50 xcopy /Y ..\OgreStuff\bin\Debug\*.cfg build\Debug"/> 
     50xcopy /Y ..\OgreStuff\bin\Debug\*.cfg build\Debug 
     51"/> 
    5152                        <Tool 
    5253                                Name="VCPreBuildEventTool"/> 
     
    7475                        <Tool 
    7576                                Name="VCCLCompilerTool" 
    76                                 AdditionalIncludeDirectories="..\OgreStuff\include;..\..\..\..\Lib\Geom\shared\GTGeometry\include" 
     77                                AdditionalIncludeDirectories="..\OgreStuff\include;..\..\..\..\Lib\Geom\shared\GTGeometry\include;..\OgreStuff\include\opt" 
    7778                                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS" 
    7879                                RuntimeLibrary="4" 
     
    8586                        <Tool 
    8687                                Name="VCLinkerTool" 
    87                                 AdditionalDependencies="OgreMain.lib GTGeometry.lib" 
     88                                AdditionalDependencies="OgreMain.lib GTGeometry.lib Plugin_OctreeSceneManager.lib" 
    8889                                OutputFile="$(OutDir)/Demo_LodTrees.exe" 
    8990                                LinkIncremental="1" 
    90                                 AdditionalLibraryDirectories="..\OgreStuff\lib;..\..\..\..\Lib\Geom\shared\GTGeometry\build\Release\" 
     91                                AdditionalLibraryDirectories="..\OgreStuff\lib;..\..\..\..\Lib\Geom\shared\GTGeometry\build\Release\;..\OgreStuff\lib\opt\debug\" 
    9192                                IgnoreDefaultLibraryNames="" 
    9293                                GenerateDebugInformation="TRUE" 
     
    100101                                Name="VCPostBuildEventTool" 
    101102                                CommandLine="xcopy /Y ..\OgreStuff\bin\Release\*.dll build\Release 
    102 xcopy /Y ..\OgreStuff\bin\Release\*.cfg build\Release"/> 
     103xcopy /Y ..\OgreStuff\bin\Release\*.cfg build\Release 
     104"/> 
    103105                        <Tool 
    104106                                Name="VCPreBuildEventTool"/> 
  • GTP/trunk/App/Demos/Geom/Demo_LodTrees/main.cpp

    r1813 r1840  
    2121#define dist_max 800 
    2222 
     23#define ENABLE_TERRAIN_SHADOWS 
     24#define TERRAIN_SHADOW_SIZE 2048 
     25 
    2326//Global variables 
    2427Geometry::GeoMeshLoader *meshloader=NULL; 
     
    3538OverlayElement* mInfo2; 
    3639OverlayElement* mHelp; 
     40Ogre::Light *theLight = NULL; 
     41Ogre::Viewport *shadowViewport = NULL; 
     42RenderTarget *render_target = NULL; 
    3743 
    3844char HelpString[]="(F1) Quit Help\n" 
     
    7884        bool frameStarted(const FrameEvent& evt) 
    7985    { 
    80                 static bool firstFrame=true; 
    81                 if (firstFrame) 
    82                 { 
    83                         CalculateShadowMap(); 
    84                         firstFrame=false; 
    85                 } 
    86  
    8786                // Move upto 80 units/second 
    8887                Real MoveFactor = 120.0 * evt.timeSinceLastFrame; 
     
    133132                                lodfactor=1.0f; 
    134133 
    135                         if (fabsf(lodfactorBefore[i]-lodfactor)>0.1f) 
     134                        if (fabsf(lodfactorBefore[i]-lodfactor)>0.05f) 
    136135                        { 
    137136                                lod_tree_types[i]->GoToLod(lodfactor); 
     
    216215                return true; 
    217216    } 
    218  
    219         void CalculateShadowMap(void) 
    220         { 
    221         } 
    222217}; 
    223218 
     
    253248 
    254249 
    255 class LodTreeApplication : public ExampleApplication 
     250#include "OgreTerrainSceneManager.h"  
     251 
     252class LodTreeApplication : public ExampleApplication, public RenderTargetListener 
    256253{ 
    257254protected: 
     
    270267    void chooseSceneManager(void) 
    271268    { 
    272         // Get the SceneManager, in this case a generic one 
    273         //      mSceneMgr = mRoot->getSceneManager(Ogre::ST_EXTERIOR_CLOSE); 
    274269        mSceneMgr = mRoot->createSceneManager("TerrainSceneManager"); 
    275270    } 
     271 
     272    // render target events 
     273    void preRenderTargetUpdate(const RenderTargetEvent& evt) 
     274    { 
     275                if (render_target) 
     276                { 
     277                        (static_cast<TerrainSceneManager*>(mSceneMgr))->getTerrainRootNode()->setVisible(false); 
     278                        mSceneMgr->setSkyBox(false, "Examples/CloudyNoonSkyBox"); 
     279                        mSceneMgr->setFog(FOG_EXP, Ogre::ColourValue(0.5f,0.5f,0.5f), 1000 ); 
     280                        mInfo2->hide(); 
     281                } 
     282    } 
     283    void postRenderTargetUpdate(const RenderTargetEvent& evt) 
     284    { 
     285                if (render_target) 
     286                { 
     287                        (static_cast<TerrainSceneManager*>(mSceneMgr))->getTerrainRootNode()->setVisible(true); 
     288                        mSceneMgr->setSkyBox(true, "Examples/CloudyNoonSkyBox"); 
     289                        mSceneMgr->setFog( FOG_EXP, Ogre::ColourValue(0.4f,0.5f,0.6f), 0.001 ); 
     290                        mInfo2->show(); 
     291//                      render_target->removeAllListeners(); 
     292//                      render_target->removeAllViewports(); 
     293                        render_target->setAutoUpdated(false); 
     294                } 
     295        } 
    276296 
    277297 
     
    285305                theCam->setNearClipDistance(0.1f); 
    286306 
    287                 mSceneMgr->setFog( FOG_EXP, Ogre::ColourValue(0.4f,0.5f,0.6f), 0.001 ); 
     307//              mSceneMgr->setFog( FOG_EXP, Ogre::ColourValue(0.4f,0.5f,0.6f), 0.001 ); 
    288308 
    289309        // Create a directional light 
    290                 Light* l = mSceneMgr->createLight("MainLight"); 
    291                 l->setType(Light::LT_DIRECTIONAL); 
    292         l->setDirection(0.1,-1.0,-0.2); 
     310                theLight = mSceneMgr->createLight("MainLight"); 
     311                theLight->setType(Light::LT_DIRECTIONAL); 
     312        theLight->setDirection(0.1,-1.0,-0.2);           
    293313         
    294314                // terrain 
    295315                mSceneMgr->setWorldGeometry( "terrain.cfg" ); 
    296  
    297         
     316      
    298317        mSceneMgr->setSkyBox(true, "Examples/CloudyNoonSkyBox"); 
    299318 
     
    343362                mInfo->setCaption("\nMaintain F2 to disable LOD"); 
    344363 
     364#ifdef ENABLE_TERRAIN_SHADOWS 
     365 
    345366                // create the shadow texture 
    346367                TexturePtr shadow_map = Ogre::TextureManager::getSingleton().createManual("TheShadowMap", 
    347368                        ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,TEX_TYPE_2D, 
    348                         256,256,0,PF_R8G8B8,TU_STATIC_WRITE_ONLY|TU_RENDERTARGET); 
    349  
    350 /*              // en vez de crear la textura aqui se puee intentar cargar de fichero una y modificarla 
     369                        TERRAIN_SHADOW_SIZE,TERRAIN_SHADOW_SIZE,0,PF_R8G8B8,TU_RENDERTARGET); 
     370 
    351371                HardwarePixelBufferSharedPtr shadowBuffer = shadow_map->getBuffer(); 
    352                 RenderTarget *render_target = shadowBuffer->getRenderTarget();*/ 
    353  
    354                 HardwarePixelBufferSharedPtr shadowBuffer = shadow_map->getBuffer(); 
    355                 RenderTarget *render_target = shadowBuffer->getRenderTarget(); 
    356  
    357  
    358 //              RenderTarget *rttTex = shadow_map->getBuffer()->getRenderTarget(); 
    359 //                      mSceneMgr->createCamera("lightCam"); 
    360          
    361  
    362  
     372                render_target = shadowBuffer->getRenderTarget(); 
     373 
     374                Ogre::Camera *lightCam = mSceneMgr->createCamera("lightCam"); 
     375                lightCam->setProjectionType(Ogre::PT_ORTHOGRAPHIC); 
     376                lightCam->setAspectRatio(1.0); 
     377                lightCam->setFOVy(Degree(164)); 
     378                lightCam->rotate(Vector3(1,0,0),Degree(-90)); 
     379                lightCam->move(BS_center+Ogre::Vector3(-50,400,78)); 
     380 
     381                shadowViewport = render_target->addViewport(lightCam); 
     382                shadowViewport->setClearEveryFrame(true); 
     383                shadowViewport->setBackgroundColour(ColourValue::White); 
     384 
     385                render_target->addListener(this); 
     386 
     387                MaterialPtr terrainMat = MaterialManager::getSingleton().getByName("Demos/TerrainMixed"); 
     388                Ogre::Pass *thePass = terrainMat->getTechnique(0)->createPass(); 
     389                thePass->setSceneBlending(Ogre::SBT_MODULATE); 
     390                Ogre::TextureUnitState *texState = thePass->createTextureUnitState(); 
     391                texState->setTextureName("TheShadowMap"); 
     392                thePass->_load(); 
     393 
     394                terrainMat->compile(); 
     395                terrainMat->load(); 
     396 
     397#endif 
    363398    } 
    364399 
Note: See TracChangeset for help on using the changeset viewer.