OGRE 3D使用resources_d.cfg加载模型

#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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值