OGRE 3D使用resources_d.cfg加载模型(类的实现)

本文档介绍了一个名为MyApplication的类,该类用于加载OGRE 3D的resources_d.cfg配置文件,并初始化3D场景。loadResources()函数遍历配置文件,添加资源位置,初始化所有资源组。startup()函数负责创建Root实例,初始化窗口、SceneManager,设置摄像机和视口,并调用loadResources()创建场景。createScene()函数则加载'Sinbad.mesh'实体到场景中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "Ogre/Ogre.h"

//创建有两个私有的指针的MyApplication类,一个指向Ogre 3D SceneManager,另一个指向Root类
class MyApplication
{
private:
 Ogre::SceneManager *_sceneManager;
 Ogre::Root *_root;
public:
 //创建一个loadResources()函数,这个函数加载resource_d.cfg配置文件
 void loadResources()
 {
  Ogre::ConfigFile cf;
  cf.load("resources_d.cfg");
  //遍历配置文件的所有区段
  Ogre::ConfigFile::SectionIterator sectionIter = cf.getSectionIterator();
  Ogre::String sectionName,typeName,dataname;
  while(sectionIter.hasMoreElements())
  {
   //获取区段名称和设置的迭代器
   sectionName = sectionIter.peekNextKey();
   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();
 }
 //创建一个startup()函数,使用plugins.cfg创建一个Ogre 3D Root类的实例
 int startup()
 {
  _root = new Ogre::Root("plugins_d.cfg");
  //显示配置窗口当用户退出时,返回-1并关闭程序
  if(!_root->showConfigDialog())
  {
   return -1;
  }
  //创建RenderWindow和SceneManager
  Ogre::RenderWindow *window = _root->initialise(true,"Ogre 3D Beginners Guide");
  _sceneManager = _root->createSceneManager(Ogre::ST_GENERIC);
  //创建一个摄像机和一个视口
  Ogre::Camera *camera = _sceneManager->createCamera("Camera");
  camera->setPosition(Ogre::Vector3(0,0,50));
  camera->lookAt(0,0,0);
  camera->setNearClipDistance(5);
  Ogre::Viewport *viewport = window->addViewport(camera);
  viewport->setBackgroundColour(Ogre::ColourValue(0,0,0));
  camera->setAspectRatio(Ogre::Real(viewport->getActualWidth())/Ogre::Real(viewport->getActualHeight()));
  //调用函数来加载我们的资源并且然后函数来创建一个场景,最后,Ogre 3D可以开始渲染了
  loadResources();
  createScene();
  _root->startRendering();
  return 0;
 }
 void createScene()
 {
  Ogre::Entity *ent = _sceneManager->createEntity("Sinbad.mesh");
  _sceneManager->getRootSceneNode()->attachObject(ent);
 }
 //构造函数设置两个指针为NULL,即使它不被赋值,这样也可以删除它们
 MyApplication()
 {
  _sceneManager = NULL;
  _root = NULL;
 }
 //当实例摧毁的时候,需要删除root实例,所以声明一个析构函数来处理
 ~MyApplication()
 {
  delete _root;
 }
};

int main(void)
{
 MyApplication app;
 app.startup();
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值