Loading Meshes From Any Path
Sometimes we need to load mesh files just like "open file" from any local path, which is not predefined in the resource file
Welcome to the new Ogre Wiki!
If you haven't done so already, be sure to visit the Wiki Portal to read about how the wiki works. Especially the Ogre Wiki Overview page.
If you haven't done so already, be sure to visit the Wiki Portal to read about how the wiki works. Especially the Ogre Wiki Overview page.
Usually the paths of resources - including meshes - should be defined in the resource.cfg file. However, sometimes we need to load mesh files just like "open file" from any local path, which is not predefined in the resource file.
The following code snippet shows to accomplish that:
// "source" should contain the pathname to your mesh file Ogre::String source; /* An alternate (better) way of doing the following would be to use the FileStreamDataStream class, which avoids having to use the more esoteric "stat" struct and stdio APIs. For more, see http://www.ogre3d.org/docs/api/html/classOgre_1_1FileStreamDataStream.html This prevents having to create and fill a MemoryDataStream instance, as the FileStreamDataStream can be used directly in the "stream" c'tor below. */ FILE* pFile = fopen( source.c_str(), "rb" ); if (!pFile) OGRE_EXCEPT(Exception::ERR_FILE_NOT_FOUND,"File " + source + " not found.", "OgreMeshLoaded"); struct stat tagStat; stat( source.c_str(), &tagStat ); MemoryDataStream* memstream = new MemoryDataStream(source, tagStat.st_size, true); fread( (void*)memstream->getPtr(), tagStat.st_size, 1, pFile ); fclose( pFile ); // give the resource a name -- it can be the full pathname if you like, since it's // just going to be the key in an STL associative tree container MeshPtr pMesh = MeshManager::getSingleton().createManual("LocalMesh",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); // this part does the actual load into the live Mesh object created above MeshSerializer meshSerializer; DataStreamPtr stream(memstream); meshSerializer.importMesh(stream, pMesh.getPointer()); // and finally, now that we have a named Mesh resource, we can use it // in our createEntity() call... Entity* pF35_1 = m_pSceneMgr->createEntity("LocalMesh_Ent", "LocalMesh");
Alias: Loading_Meshes_From_Any_Path
Contributors to this page: jacmoe
and
Spacegaier
.
Page last modified on Wednesday 11 of August, 2010 13:10:22 GMT by jacmoe
.
The content on this page is licensed under the terms of the Creative Commons Attribution-ShareAlike License.
As an exception, any source code contributed within the content is released into the Public Domain.
Sidebar
Search box
Online users
95
online users

