Changeset 1104


Ignore:
Timestamp:
07/07/06 17:07:06 (18 years ago)
Author:
gumbau
Message:

Improved LODStrips and LODTree demos

Location:
GTP/trunk/App/Demos/Geom
Files:
9 added
6 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Geom/Demo_LodStrips/main.cpp

    r1092 r1104  
    446446 
    447447                //Models 
    448         entity = mSceneMgr->createEntity(model_name, "../../../OgreStuff/media/GT/dwarflod.mesh"); 
     448        entity = mSceneMgr->createEntity(model_name, "../../../OgreStuff/media/GT/bunnylod.mesh"); 
    449449 
    450450                ogreMesh = entity->getMesh().getPointer(); 
     
    452452                // load LOD info from the object 
    453453                meshloader=new Geometry::GeoMeshLoader; 
    454                 Geometry::Mesh *themesh = meshloader->load("../../../OgreStuff/media/GT/dwarflod.mesh"); 
     454                Geometry::Mesh *themesh = meshloader->load("../../../OgreStuff/media/GT/bunnylod.mesh"); 
    455455 
    456456        node = mSceneMgr->getRootSceneNode()->createChildSceneNode(); 
     
    481481                entity->setMaterialName("test_mat"); 
    482482 
     483 
     484                for (int i=1; i<4; i++) // 20 
     485                        for (int j=1; j<4; j++) // 20 
     486                        { 
     487                                char newObjName[16]=""; 
     488                                sprintf(newObjName,"arbol_%d_%d",i,j); 
     489                                Ogre::SceneNode * auxnode = mSceneMgr->getRootSceneNode()->createChildSceneNode(); 
     490                                auxnode->attachObject( entity->clone(newObjName) ); 
     491                                auxnode->scale(0.8f,0.8f,0.8f); 
     492                                float randomsepx = (float)((rand()%18)-9); 
     493                                float randomsepy = (float)((rand()%12)-6); 
     494                                auxnode->translate(i*100.0f+randomsepx,0.0f,-j*100.0f-randomsepx); 
     495                        } 
     496 
     497 
    483498        // show overlay 
    484499        Overlay* pOver = OverlayManager::getSingleton().getByName("Demo_LodStrips/Overlay");     
  • GTP/trunk/App/Demos/Geom/Demo_LodTrees/main.cpp

    r1092 r1104  
    3030Ogre::Mesh *ogreMesh=NULL; 
    3131Geometry::GeoMeshLoader *meshloader=NULL; 
    32 SceneNode* node; 
    33  
    34 MaterialPtr *mat; 
     32bool force_maxLODfactor = false; 
     33 
     34Ogre::Vector3 forest_center; 
    3535 
    3636ColourValue color=ColourValue::Red; 
     
    7575                mRenderOp.indexData->indexBuffer = ibuf; 
    7676                mRenderOp.indexData->indexStart = 0; 
    77                 mRenderOp.indexData->indexCount = indices_to_render; 
     77                mRenderOp.indexData->indexCount = indices_to_render;             
    7878 
    7979                unsigned long* pIdx = static_cast<unsigned long*>(ibuf->lock(Ogre::HardwareBuffer::HBL_NORMAL)); 
     
    138138                int i=0; 
    139139 
    140                 dist = node->getPosition() - mCamera->getPosition();  
     140                dist = forest_center - mCamera->getPosition();  
    141141                distance =dist.length(); 
    142  
    143                 DumpDataToOgreBuffers(ogreMesh,myTrees); 
    144142 
    145143                float lodfactor = (float)(distance - dist_min) / (float)(dist_max - dist_min); 
    146144                lodfactor = 1.0f - lodfactor; 
    147145 
    148                 if (lodfactor >= 0.0f && lodfactor <= 1.0f)                      
     146                if (lodfactor<0.0f) 
     147                        lodfactor=0.0f; 
     148                if (lodfactor>1.0f) 
     149                        lodfactor=1.0f; 
     150 
     151                if (force_maxLODfactor) 
     152                        lodfactor=1.0f; 
     153 
     154                static float lodfactorBefore = -1.0f; 
     155                if (fabsf(lodfactorBefore-lodfactor)>0.05f) 
    149156                { 
    150157                        myTrees->GoToLod(lodfactor); 
    151  
    152                         if (lodfactor < 0.333f) 
    153                         { 
    154                                 color.r=0.0; 
    155                                 color.g=(lodfactor)*3.0f;//nlod*1.0/(diflods/3); 
    156                                 color.b=(1.0-lodfactor)*3.0f;//(nlod*1.0/(diflods/3)); 
    157                         } 
    158                         else 
    159                         { 
    160                                 if (lodfactor<0.666f) 
    161                                 { 
    162                                         color.r=(lodfactor-0.333f)*3.0f;//(nlod-diflods/3)*1.0/(diflods/3); 
    163                                         color.g=1.0; 
    164                                         color.b=0.0; 
    165                                 } 
    166                                 else 
    167                                 { 
    168                                         color.r=1.0; 
    169                                         color.g=(1.0-lodfactor)*3.0f;//(nlod-(2*diflods/3))*1.0/(diflods/3); 
    170                                         color.b=0.0; 
    171                                 } 
    172                         } 
    173                         mat[0]->setDiffuse(color); 
    174                 } 
    175 /*              else 
    176                 { 
    177                         if ((distance > dist_max)) 
    178                         { 
    179                         //      myStrips->GoToLod(1.0f); 
    180  
    181                                 color.r=0.0; 
    182                                 color.g=0.0; 
    183                                 color.b=1.0; 
    184                                 mat[0]->setDiffuse(color); 
    185  
    186                         } 
    187                         else 
    188                         { 
    189                                 if ((distance < dist_min)) 
    190                                 { 
    191                                 //      myStrips->GoToLod(0.0f); 
    192  
    193                                         color.r=1.0; 
    194                                         color.g=0.0; 
    195                                         color.b=0.0; 
    196                                         mat[0]->setDiffuse(color); 
    197                                 } 
    198                         } 
    199                 }*/ 
     158                        DumpDataToOgreBuffers(ogreMesh,myTrees); 
     159                        lodfactorBefore=lodfactor; 
     160                } 
    200161 
    201162                // Move the node 
     
    211172                  mCamera->yaw(mRotScale); 
    212173 
     174                force_maxLODfactor=mInputDevice->isKeyDown(Ogre::KC_F2);                   
     175 
    213176                if(mInputDevice->isKeyDown(Ogre::KC_RIGHT)) 
    214177                  mCamera->yaw(-mRotScale); 
    215178 
    216                 // Move the node 
    217                 if(mInputDevice->isKeyDown(Ogre::KC_W)) 
    218                   node->translate(0,mMoveScale,0); 
    219  
    220                 if(mInputDevice->isKeyDown(Ogre::KC_S)) 
    221                   node->translate(0,-mMoveScale,0); 
    222  
    223                 if(mInputDevice->isKeyDown(Ogre::KC_Z)) 
    224                   node->scale(1.01,1.01,1.01); 
    225  
    226                 if(mInputDevice->isKeyDown(Ogre::KC_X)) 
    227                   node->scale(0.99,0.99,0.99); 
    228  
    229                 // Rotate 
    230                 if(mInputDevice->isKeyDown(Ogre::KC_A)) 
    231                   node->yaw(mRotScale); 
    232  
    233                 if(mInputDevice->isKeyDown(Ogre::KC_D)) 
    234                   node->yaw(-mRotScale); 
    235  
    236179                if(mInputDevice->isKeyDown(Ogre::KC_ESCAPE)) 
    237180                { 
    238                         delete myTrees; 
    239  
    240                         delete [] mat; 
    241  
     181                        //delete myTrees; 
    242182                    return false; 
    243183                } 
     
    262202                mInfo->setCaption(cadena); 
    263203 
    264                 if (lodfactor<0.0f) 
    265                         lodfactor=0.0f; 
    266                 if (lodfactor>1.0f) 
    267                         lodfactor=1.0f; 
    268204                sprintf(cadena,"LOD factor: %f",lodfactor); 
    269205 
     
    296232    void createScene(void) 
    297233    { 
    298                 mat = new MaterialPtr[1]; 
     234//              mat = new MaterialPtr[1]; 
    299235                 
    300236        theCam = mCamera; 
    301237        theCam->setPosition(0,20,dist_max+50); 
    302238        // Set ambient light 
    303         mSceneMgr->setAmbientLight(ColourValue(0.3, 0.3, 0.3)); 
    304  
    305         // Create a point light 
    306         Light* l = mSceneMgr->createLight("MainLight"); 
    307         l->setType(Light::LT_DIRECTIONAL); 
    308         l->setDirection(0.0,0.0,-1.0); 
     239//        mSceneMgr->setAmbientLight(ColourValue(0.3, 0.3, 0.3)); 
     240                mSceneMgr->setAmbientLight(ColourValue(1.0, 1.0, 1.0)); 
     241 
     242        // Create a directional light 
     243/*              Light* l = mSceneMgr->createLight("MainLight"); 
     244                l->setType(Light::LT_DIRECTIONAL); 
     245        l->setDirection(0.0,-1.0,0.0);*/ 
     246        //      l->setAttenuation(1000000.0f, 1.0f, 1.0f, 1.0f); 
    309247         
    310248        // Define a floor plane mesh 
     
    332270 
    333271                //Models 
    334         entity = mSceneMgr->createEntity(model_name, "../../../OgreStuff/media/GT/betulalod.mesh"); 
     272        entity = mSceneMgr->createEntity(model_name, "../../../OgreStuff/media/GT/ML12m.mesh"); 
    335273 
    336274                ogreMesh = entity->getMesh().getPointer(); 
     
    338276                // load LOD info from the object 
    339277                meshloader=new Geometry::GeoMeshLoader; 
    340                 Geometry::Mesh *themesh = meshloader->load("../../../OgreStuff/media/GT/betulalod.mesh"); 
    341  
    342         node = mSceneMgr->getRootSceneNode()->createChildSceneNode(); 
    343         node->attachObject( entity ); 
    344                 node->rotate(Ogre::Vector3(1,0,0),Ogre::Radian(-90.0f)); 
    345  
    346 //              myStrips = new LodStripsLibrary(lod_file,entity->getMesh().getPointer()); 
     278                Geometry::Mesh *themesh = meshloader->load("../../../OgreStuff/media/GT/ML12m.mesh"); 
     279 
     280                myTrees = new Geometry::LodTreeLibrary(meshloader->GetLodStripsData(),meshloader->GetTreeSimpSeq(),themesh); 
     281 
     282                entity->setNormaliseNormals(true); 
     283 
     284                for (int submesh=0; submesh < ogreMesh->getNumSubMeshes(); submesh++) 
     285                { 
     286                        bool istrunk = myTrees->GetLeavesSubMesh()!=submesh; 
     287                        if (istrunk) 
     288                                entity->getSubEntity(submesh)->setMaterialName("Examples/Populifolia/trunk"); 
     289                        else 
     290                                entity->getSubEntity(submesh)->setMaterialName("Examples/Populifolia/leaf"); 
     291                } 
     292 
     293                forest_center=Ogre::Vector3(150.0f,0.0f,0.0f); 
     294                for (int i=1; i<8; i++) // 20 
     295                        for (int j=1; j<8; j++) // 20 
     296                        { 
     297                                char newTreeName[16]=""; 
     298                                sprintf(newTreeName,"arbol_%d_%d",i,j); 
     299                                Ogre::SceneNode * auxnode = mSceneMgr->getRootSceneNode()->createChildSceneNode(); 
     300                                auxnode->attachObject( entity->clone(newTreeName) ); 
     301                                auxnode->scale(4.0f,4.0f,4.0f); 
     302                                auxnode->rotate(Ogre::Vector3(1,0,0),Ogre::Radian(-3.14159f*0.5f)); 
     303                                float randomsepx = (float)((rand()%18)-9); 
     304                                float randomsepy = (float)((rand()%12)-6); 
     305                                auxnode->translate(i*30.0f+randomsepx,0.0f,-j*30.0f-randomsepx); 
     306                        } 
    347307 
    348308                if (!meshloader->GetLodStripsData() || !meshloader->GetTreeSimpSeq()) 
    349309                        exit(1); 
    350  
    351 //              myStrips = new Geometry::LodStripsLibrary(meshloader->GetLodStripsData(),themesh); 
    352                 myTrees = new Geometry::LodTreeLibrary(meshloader->GetLodStripsData(),meshloader->GetTreeSimpSeq(),themesh); 
    353  
    354                 entity->setNormaliseNormals(true); 
    355  
    356 /*              // Colour-coded material 
    357                 mat[0] = MaterialManager::getSingleton().create("test_mat",  
    358                         ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 
    359                 mat[0]->setCullingMode(CULL_ANTICLOCKWISE); 
    360                 mat[0]->setAmbient(ColourValue::Black); 
    361                 mat[0]->setDiffuse(color); 
    362                 mat[0]->setLightingEnabled(true); 
    363                 entity->setMaterialName("test_mat");*/ 
    364  
    365  
    366                 // Colour-coded material 
    367                 mat[0] = MaterialManager::getSingleton().create("test_mat",  
    368                         ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); 
    369                 mat[0]->setCullingMode(CULL_NONE); 
    370                 mat[0]->setAmbient(ColourValue::Black); 
    371                 mat[0]->setDiffuse(color); 
    372                 mat[0]->setLightingEnabled(true); 
    373                 mat[0]->createTechnique()->createPass()->createTextureUnitState("nm_rt.png"); 
    374                 //entity->setMaterialName("test_mat"); 
    375                 entity->setMaterialName("Examples/GrassFloor"); 
    376  
    377310 
    378311        // show overlay 
  • GTP/trunk/App/Demos/Geom/OgreStuff/media/materials/scripts/Example.material

    r1092 r1104  
    735735} 
    736736 
     737material Examples/Populifolia/leaf 
     738{ 
     739    technique 
     740    { 
     741        pass 
     742        { 
     743                alpha_rejection greater 150  
     744                scene_blend alpha_blend 
     745              cull_hardware none 
     746            cull_software none 
     747            texture_unit 
     748            { 
     749                texture Pinus-leaf.tif  
     750            } 
     751        } 
     752    } 
     753} 
     754 
     755material Examples/Populifolia/trunk 
     756{ 
     757        technique 
     758        { 
     759                pass 
     760                { 
     761                        cull_hardware anticlockwise 
     762                        texture_unit 
     763                        { 
     764                                texture populifolia-trunk.png  
     765                        } 
     766                } 
     767        } 
     768} 
     769 
    737770material Examples/Rockwall 
    738771{ 
Note: See TracChangeset for help on using the changeset viewer.