#include "Ogre/Ogre.h"
int main(void)
{
Ogre::Root *root = new Ogre::Root("plugins_d.cfg");//创建一个Ogre::Root类的实例;这个类需要plugins_d.cfg作为参数
if(!root->showConfigDialog())//显示配置对话框
{
return -1;
}
Ogre::RenderWindow *window = root->initialise(true,"Ogre 3D Beginners Gudie");//创建一个渲染窗口
Ogre::SceneManager *sceneManager = root->createSceneManager(Ogre::ST_GENERIC);//创建一个新的场景管理器,参数含义见http://blog.csdn.net/jimoshuicao/article/details/7940829
//创建一个摄像机并给其命名
Ogre::Camera *camera = sceneManager->createCamera("Camera");
camera->setPosition(Ogre::Vector3(0.0f,0.0f,50.0f));
camera->lookAt(Ogre::Vector3(0.0f,0.0f,0.0f));
camera->setNearClipDistance(5);
//使用这个摄像机,创建一个视口并设置背景颜色为黑色
Ogre::Viewport *viewport = window->addViewport(camera);
viewport->setBackgroundColour(Ogre::ColourValue(0.0f,0.0f,0.0f));
//使用视口并设置摄像机的纵横比
camera->setAspectRatio(Ogre::Real(viewport->getActualWidth())/Ogre::Real(viewport->getActualHeight()));
//不同之处
//替换加载zip包的代码为一个指向resource_d.cfg的配置文件的实例
Ogre::ConfigFile cf;//ConfigFile类:简单加载和解析配置文件
cf.load("resources_d.cfg");//导入资源文件
//首先获取一个可以遍历配置文件的每个区块的迭代器
Ogre::ConfigFile::SectionIterator sectionIter = cf.getSectionIterator();//段
//定义三个字符串以保存从配置文件中提取的存数据并且遍历每个区块
Ogre::String sectionName,typeName,dataname;
while(sectionIter.hasMoreElements())
{
//获取区块的名称
sectionName = sectionIter.peekNextKey();//获得资源管理器中的下一个的key(map映射的关系)
//获取区块中包含的设置,同时,提前创建一个区块的迭代器
Ogre::ConfigFile::SettingsMultiMap *settings = sectionIter.getNext();
Ogre::ConfigFile::SettingsMultiMap::iterator i;//声明多重映射的对象
//在区块中遍历每个设置
for(i = settings->begin(); i != settings->end(); ++i)//使控制容器中的索引都对应着材质的数据
{
//使用迭代器来获取资源的名称和类型
typeName = i->first;
dataname = i->second;
//使用资源名称,类型和区块的名称并添加至资源索引
Ogre::ResourceGroupManager::getSingleton().addResourceLocation(dataname,typeName,sectionName);//资源定位
}
}
//如果现在不想要索引更多的资源,可以仅索引添加的资源
Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();//初始化,后续才可以加载mesh文件
//现在创建一个Sinbad mesh的实例并添加到场景
Ogre::Entity *ent = sceneManager->createEntity("Sinbad.mesh");
sceneManager->getRootSceneNode()->attachObject(ent);
//最后,告诉root开始渲染
root->startRendering();
return 0;
}
OGRE 3D使用resources_d.cfg加载模型
最新推荐文章于 2016-11-30 18:22:42 发布