Index: code/branches/ogre1.9/src/orxonox/graphics/Model.cc
===================================================================
--- code/branches/ogre1.9/src/orxonox/graphics/Model.cc	(revision 11125)
+++ code/branches/ogre1.9/src/orxonox/graphics/Model.cc	(revision 11129)
@@ -30,5 +30,10 @@
 
 #include <OgreEntity.h>
-#include <OgreProgressiveMesh.h>
+#if OGRE_VERSION >= 0x010900
+#   include <OgreProgressiveMeshGenerator.h>
+#   include <OgreDistanceLodStrategy.h>
+#else
+#   include <OgreProgressiveMesh.h>
+#endif
 
 #include "core/CoreIncludes.h"
@@ -196,19 +201,9 @@
             {
                 float volume = this->mesh_.getEntity()->getBoundingBox().volume();
-/*
-                float scaleFactor = 1;
-
-                BaseObject* creatorPtr = this;
-
-                while(creatorPtr!=nullptr&&orxonox_cast<WorldEntity*>(creatorPtr))
-                {
-                    scaleFactor *= getBiggestScale(((WorldEntity*) creatorPtr)->getScale3D());
-                    creatorPtr = creatorPtr->getCreator();
-                }
-                orxout() << "name: " << this->meshSrc_ << "scaleFactor: " << scaleFactor << ", volume: " << volume << endl;
-*/
                 orxout(verbose, context::lod) << "Setting lodLevel for " << this->meshSrc_<< " with lodLevel_: " << this->lodLevel_ <<" and volume: "<< volume << ":" << endl;
 
-#if OGRE_VERSION >= 0x010800
+#if OGRE_VERSION >= 0x010900
+                Ogre::LodConfig::LodLevelList distList;
+#elif OGRE_VERSION >= 0x010800
                 Ogre::ProgressiveMesh::LodValueList distList;
 #elif OGRE_VERSION >= 0x010700
@@ -220,19 +215,18 @@
                 if( lodLevel_>0 )
                 {
-//                    float factor = scaleFactor*5/lodLevel_;
                     float factor = pow(volume, 2.0f / 3.0f) * 15.0f / lodLevel_;
 
                     orxout(verbose, context::lod) << "LodLevel set with factor: " << factor << endl;
 
-                    distList.push_back(70.0f*factor);
-                    distList.push_back(140.0f*factor);
-                    distList.push_back(170.0f*factor);
-                    distList.push_back(200.0f*factor);
-                    distList.push_back(230.0f*factor);
-                    distList.push_back(250.0f*factor);
-                    distList.push_back(270.0f*factor);
-                    distList.push_back(290.0f*factor);
-                    distList.push_back(310.0f*factor);
-                    distList.push_back(330.0f*factor);
+                    addLodDistanceToList(distList, 70.0f*factor);
+                    addLodDistanceToList(distList, 140.0f*factor);
+                    addLodDistanceToList(distList, 170.0f*factor);
+                    addLodDistanceToList(distList, 200.0f*factor);
+                    addLodDistanceToList(distList, 230.0f*factor);
+                    addLodDistanceToList(distList, 250.0f*factor);
+                    addLodDistanceToList(distList, 270.0f*factor);
+                    addLodDistanceToList(distList, 290.0f*factor);
+                    addLodDistanceToList(distList, 310.0f*factor);
+                    addLodDistanceToList(distList, 330.0f*factor);
                     while(distList.size()>this->numLodLevels_)
                         distList.pop_back();
@@ -240,5 +234,13 @@
 
                     //Generiert LOD-Levels
-#if OGRE_VERSION >= 0x010800
+#if OGRE_VERSION >= 0x010900
+                    Ogre::LodConfig config;
+                    config.mesh = this->mesh_.getEntity()->getMesh();
+                    config.levels = distList;
+                    config.strategy = Ogre::DistanceLodSphereStrategy::getSingletonPtr();
+
+                    Ogre::ProgressiveMeshGenerator generator;
+                    generator.generateLodLevels(config);
+#elif OGRE_VERSION >= 0x010800
                     Ogre::ProgressiveMesh::generateLodLevels(this->mesh_.getEntity()->getMesh().get(), distList, Ogre::ProgressiveMesh::VRQ_PROPORTIONAL,
                         this->lodReductionRate_);
@@ -263,3 +265,13 @@
 #endif
     }
+
+    template <class T>
+    void Model::addLodDistanceToList(T& list, float distance)
+    {
+#if OGRE_VERSION >= 0x010900
+        list.push_back({distance, Ogre::LodLevel::VRM_COLLAPSE_COST, this->lodReductionRate_, 0, false});
+#else
+        list.push_back(distance);
+#endif
+    }
 }
