Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 31, 2010, 9:02:48 AM (14 years ago)
Author:
scheusso
Message:

some changes regarding lod:

  • added lodtemplate in different levels
  • trying to avoid sigabrt's because of models with too much lod levels
Location:
code/branches/presentation3/src/orxonox
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • code/branches/presentation3/src/orxonox/Level.cc

    r6961 r7036  
    145145    {
    146146        std::string meshName = lodInformation->getMeshName();
    147         this->lodInformation_.insert(std::make_pair(meshName,lodInformation));
     147//         this->lodInformation_.insert(std::make_pair(meshName,lodInformation));
     148        if( this->lodInformation_.find(meshName) != this->lodInformation_.end())
     149          CCOUT(4) << "replacing lod information for " << meshName << endl;
     150        this->lodInformation_[meshName] = lodInformation;
    148151    }
    149152
  • code/branches/presentation3/src/orxonox/graphics/MeshLodInformation.cc

    r7020 r7036  
    4141
    4242    MeshLodInformation::MeshLodInformation(BaseObject* creator)
    43         : BaseObject(creator), lodLevel_(-1), bEnabled_(true)
     43        : BaseObject(creator), lodLevel_(5), bEnabled_(true), numLevels_(10), reductionRate_(0.15)
    4444    {
    4545        RegisterObject(MeshLodInformation);
     
    5656        XMLPortParam(MeshLodInformation, "lodQuality", setLodLevel, getLodLevel, xmlelement, mode);
    5757        XMLPortParam(MeshLodInformation, "enabled", setEnabled, getEnabled, xmlelement, mode);
     58        XMLPortParam(MeshLodInformation, "numLevels", setNumLevels, getNumLevels, xmlelement, mode);
     59        XMLPortParam(MeshLodInformation, "reductionRate", setReductionRate, getReductionRate, xmlelement, mode);
    5860    }
    5961   
  • code/branches/presentation3/src/orxonox/graphics/MeshLodInformation.h

    r7020 r7036  
    4747            std::string getMeshName();
    4848            bool getEnabled(){ return this->bEnabled_; }
     49            unsigned int getNumLevels(){ return this->numLevels_; }
     50            float getReductionRate(){ return this->reductionRate_; }
    4951           
    5052            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
     
    5355            void setLodLevel(float lodLevel);
    5456            void setMeshSource(std::string meshSource);
    55             void setEnabled( bool enabled ){ this->bEnabled_ = true; }
     57            void setEnabled( bool enabled ){ this->bEnabled_ = enabled; }
     58            void setNumLevels( unsigned int num ){ this->numLevels_ = num; }
     59            void setReductionRate( float rate ){ this->reductionRate_ = rate; }
    5660            std::string getMeshSource();
    5761            std::string meshSource_;
    5862            float lodLevel_;
    5963            bool bEnabled_;
     64            unsigned int numLevels_;
     65            float reductionRate_;
    6066
    6167    };
  • code/branches/presentation3/src/orxonox/graphics/Model.cc

    r7024 r7036  
    4242    CreateFactory(Model);
    4343
    44     Model::Model(BaseObject* creator) : StaticEntity(creator)
     44    Model::Model(BaseObject* creator) :
     45        StaticEntity(creator), bCastShadows_(true), lodLevel_(5), bLodEnabled_(true), numLodLevels_(10), lodReductionRate_(.15)
    4546    {
    4647        RegisterObject(Model);
    4748
    48         this->bCastShadows_ = true;
    49 
    5049        this->registerVariables();
    51         //LoD
    52         this->lodLevel_=5;
    5350    }
    5451
     
    10299               
    103100                //LOD
    104                 if(this->mesh_.getEntity()->getMesh()->getNumLodLevels()==1
    105                     &&this->meshSrc_!="laserbeam.mesh")
     101                if( this->mesh_.getEntity()->getMesh()->getNumLodLevels()==1 )
    106102                {
    107103                    Level* level = this->getLevel();
     
    109105                    assert( level != 0 );
    110106                   
    111                     if( level->getLodInfo(this->meshSrc_)!=0 )
    112                         setLodLevel(level->getLodInfo(this->meshSrc_)->getLodLevel());
    113                     if( level->getLodInfo(this->meshSrc_)==0 || level->getLodInfo(this->meshSrc_)->getEnabled() )
     107                    MeshLodInformation* lodInfo = level->getLodInfo(this->meshSrc_);
     108                    if( lodInfo )
    114109                    {
    115 
     110                        setLodLevel(lodInfo->getLodLevel());
     111                        this->bLodEnabled_ = lodInfo->getEnabled();
     112                        this->numLodLevels_ = lodInfo->getNumLevels();
     113                        this->lodReductionRate_ = lodInfo->getReductionRate();
     114                    }
     115                    if( this->numLodLevels_>10 )
     116                    {
     117                        CCOUT(2) << "More than 10 LoD levels requested. Creating only 10." << endl;
     118                        this->numLodLevels_ = 10;
     119                    }
     120                    if( this->bLodEnabled_ )
     121                    {
    116122                        float volume = this->mesh_.getEntity()->getBoundingBox().volume();
    117123    //                     float scaleFactor = 1;
     
    139145                            float factor = volume/3/lodLevel_;
    140146                           
    141                             COUT(4)<<"LodLevel set with factor: "<<factor<<std::endl;
     147                            COUT(4) << "LodLevel set with factor: " << factor << endl;
    142148
    143149                            distList.push_back(70.0f*factor);
     
    151157                            distList.push_back(310.0f*factor);
    152158                            distList.push_back(330.0f*factor);
    153 
    154                             float reductionValue = 0.15f;
     159                            while(distList.size()>this->numLodLevels_)
     160                                distList.pop_back();
    155161
    156162                           
    157163                            //Generiert LOD-Levels
    158                             this->mesh_.getEntity()->getMesh()->generateLodLevels(distList, Ogre::ProgressiveMesh::VRQ_PROPORTIONAL, reductionValue);
     164                            this->mesh_.getEntity()->getMesh()->generateLodLevels(distList, Ogre::ProgressiveMesh::VRQ_PROPORTIONAL, this->lodReductionRate_);
    159165                        }
    160166                        else
     
    166172                                what = "<0";
    167173                           
    168                             COUT(4)<<"LodLevel not set because lodLevel("<<lodLevel_<<") was "<<what<<"."<<std::endl;
     174                            COUT(4)<<"LodLevel not set because lodLevel("<<lodLevel_<<") was "<<what<<"." << endl;
    169175                        }
    170176                    }
     177                    else
     178                        COUT(4) << "LodLevel for " << this->meshSrc_ << " not set because is disabled." << endl;
    171179                }
    172180            }
  • code/branches/presentation3/src/orxonox/graphics/Model.h

    r6937 r7036  
    7979            //LoD
    8080            float lodLevel_;
     81            bool bLodEnabled_;
     82            unsigned int numLodLevels_;
     83            float lodReductionRate_;
     84           
    8185    };
    8286}
Note: See TracChangeset for help on using the changeset viewer.