32 #include <OgreMeshLodGenerator.h>
33 #include <OgreLodConfig.h>
38 MeshObject::MeshObject(Ogre::String meshName, Ogre::String entityRG, Ogre::String entityName, Ogre::SceneNode *m_scene_node)
39 : m_scene_node(m_scene_node), m_entity(nullptr), m_cast_shadows(true)
77 m_mesh = Ogre::MeshManager::getSingleton().getByName(meshName, entityRG);
82 m_mesh = Ogre::MeshManager::getSingleton().load(meshName, entityRG);
87 StringUtil::splitBaseFilename(meshName, basename, ext);
89 bool lod_available =
false;
90 Ogre::LodConfig config(
m_mesh);
93 FileInfoListPtr
files = ResourceGroupManager::getSingleton().findResourceFileInfo(entityRG, basename +
"_lod*.mesh");
94 for (FileInfoList::iterator iterFiles =
files->begin(); iterFiles !=
files->end(); ++iterFiles)
96 String
format = basename +
"_lod%d.mesh";
98 int r = sscanf(iterFiles->filename.c_str(),
format.c_str(), &i);
123 distance = std::max(20.0f, sightrange * 0.1f);
125 distance = std::max(20.0f, sightrange * 0.2f);
127 distance = std::max(20.0f, sightrange * 0.3f);
129 distance = std::max(20.0f, sightrange * 0.4f);
131 config.createManualLodLevel(distance, iterFiles->filename);
132 lod_available =
true;
136 FileInfoListPtr files2 = ResourceGroupManager::getSingleton().findResourceFileInfo(entityRG, basename +
"_clod_*.mesh");
137 for (FileInfoList::iterator iterFiles = files2->begin(); iterFiles != files2->end(); ++iterFiles)
140 String
format = basename +
"_clod_%d.mesh";
142 int r = sscanf(iterFiles->filename.c_str(),
format.c_str(), &i);
146 config.createManualLodLevel(i, iterFiles->filename);
147 lod_available =
true;
151 Ogre::MeshLodGenerator::getSingleton().generateLodLevels(config);
153 Ogre::MeshLodGenerator::getSingleton().generateAutoconfiguredLodLevels(
m_mesh);
163 catch (Ogre::Exception &e)
165 RoR::LogFormat(
"[RoR] Error creating entity of mesh '%s' (group: '%s'), message: %s",
166 meshName.c_str(), entityRG.c_str(), e.getFullDescription().c_str());