Ogre2.1 分析笔记(二)-程序启动流程
2017-05-03 14:14
295 查看
1. 初始化一个Root对象
Ogre::Root *root =
new Ogre::Root();
2. 在初始化Root对象时,Ogre会同时初始化D3D11和OGL3+两种渲染系统。此步骤中应该选择将哪个渲染系统作为当前的渲染系统。
std::string sRenderSystem =
"OpenGL 3+ Rendering Subsystem";
Ogre::RenderSystem *pRenderSystem =root->getRenderSystemByName(sRenderSystem);
root->setRenderSystem(pRenderSystem);
3. 使用渲染系统对渲染窗口进行设置,并创建渲染窗口。
pRenderSystem->setConfigOption("Full Screen",
"No");
pRenderSystem->setConfigOption("Video Mode",
"800x600 @32-bit colour");
root->initialise(false);
Ogre::RenderWindow *window =root->createRenderWindow("OgreTest", 800, 600,
false);
initialise(true)也可以创建窗口。
4. 创建场景管理器和相机。
Ogre::SceneManager *sceneManager = root->createSceneManager(Ogre::ST_GENERIC,1,Ogre::INSTANCING_CULLING_SINGLETHREAD);
Ogre::Camera *camera =sceneManager->createCamera("Camera");
camera->setPosition(0,0, 50);
camera->lookAt(0,0, 0);
camera->setNearClipDistance(5);
5. 创建工作空间
Ogre::CompositorManager2 *pCompositorManager = root->getCompositorManager2();
const std::string sWorkSpace =
"OgreTest";
pCompositorManager->createBasicWorkspaceDef(sWorkSpace,Ogre::ColourValue::White);
pCompositorManager->addWorkspace(sceneManager,window, camera, sWorkSpace,
true);
6. 加载HLMS系统
//加载hlms系统
std::string dataFolder =
"C:/Users/aa/Documents/ogre/Samples/Media/";
std::string shaderSyntax =
"GLSL";
Ogre::Archive *archiveLibrary =Ogre::ArchiveManager::getSingletonPtr()->load(
dataFolder+
"Hlms/Common/" + shaderSyntax,
"FileSystem",
true);
Ogre::Archive *archiveLibraryAny= Ogre::ArchiveManager::getSingletonPtr()->load(
dataFolder+
"Hlms/Common/Any",
"FileSystem",
true);
Ogre::Archive *archivePbsLibraryAny = Ogre::ArchiveManager::getSingletonPtr()->load(
dataFolder+
"Hlms/Pbs/Any",
"FileSystem",
true);
Ogre::ArchiveVec library;
library.push_back(archiveLibrary);
library.push_back(archiveLibraryAny);
Ogre::Archive *archivePbs =Ogre::ArchiveManager::getSingletonPtr()->load(
dataFolder+
"Hlms/Pbs/" + shaderSyntax,
"FileSystem",
true);
library.push_back(archivePbsLibraryAny);
Ogre::HlmsPbs *hlmsPbs =
OGRE_NEW Ogre::HlmsPbs(archivePbs,&library);
Ogre::Root::getSingleton().getHlmsManager()->registerHlms(hlmsPbs);
library.pop_back();
7. 初始化资源组,定位资源
Ogre::ResourceGroupManager::getSingleton().addResourceLocation("C:/Users/aa/Documents/ogre/Samples/Media/packs/DebugPack.zip",
"Zip");
Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
8. 创建物体,添加到场景图中,并设置位置。
Ogre::Item *pItem = sceneManager->createItem("Cube_d.mesh", Ogre::ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
Ogre::SceneNode *pSceneNode =sceneManager->getRootSceneNode();
pSceneNode->attachObject(pItem);
pSceneNode->setPosition(0.0,0.0, 0.0);
9. 开始渲染
while (true)
{
root->renderOneFrame();
}
总结一下:启动流程主要分为几个步骤:1.创建渲染窗口;2加载HLMS系统,3加载网格数据并添加到场景中。
Ogre::Root *root =
new Ogre::Root();
2. 在初始化Root对象时,Ogre会同时初始化D3D11和OGL3+两种渲染系统。此步骤中应该选择将哪个渲染系统作为当前的渲染系统。
std::string sRenderSystem =
"OpenGL 3+ Rendering Subsystem";
Ogre::RenderSystem *pRenderSystem =root->getRenderSystemByName(sRenderSystem);
root->setRenderSystem(pRenderSystem);
3. 使用渲染系统对渲染窗口进行设置,并创建渲染窗口。
pRenderSystem->setConfigOption("Full Screen",
"No");
pRenderSystem->setConfigOption("Video Mode",
"800x600 @32-bit colour");
root->initialise(false);
Ogre::RenderWindow *window =root->createRenderWindow("OgreTest", 800, 600,
false);
initialise(true)也可以创建窗口。
4. 创建场景管理器和相机。
Ogre::SceneManager *sceneManager = root->createSceneManager(Ogre::ST_GENERIC,1,Ogre::INSTANCING_CULLING_SINGLETHREAD);
Ogre::Camera *camera =sceneManager->createCamera("Camera");
camera->setPosition(0,0, 50);
camera->lookAt(0,0, 0);
camera->setNearClipDistance(5);
5. 创建工作空间
Ogre::CompositorManager2 *pCompositorManager = root->getCompositorManager2();
const std::string sWorkSpace =
"OgreTest";
pCompositorManager->createBasicWorkspaceDef(sWorkSpace,Ogre::ColourValue::White);
pCompositorManager->addWorkspace(sceneManager,window, camera, sWorkSpace,
true);
6. 加载HLMS系统
//加载hlms系统
std::string dataFolder =
"C:/Users/aa/Documents/ogre/Samples/Media/";
std::string shaderSyntax =
"GLSL";
Ogre::Archive *archiveLibrary =Ogre::ArchiveManager::getSingletonPtr()->load(
dataFolder+
"Hlms/Common/" + shaderSyntax,
"FileSystem",
true);
Ogre::Archive *archiveLibraryAny= Ogre::ArchiveManager::getSingletonPtr()->load(
dataFolder+
"Hlms/Common/Any",
"FileSystem",
true);
Ogre::Archive *archivePbsLibraryAny = Ogre::ArchiveManager::getSingletonPtr()->load(
dataFolder+
"Hlms/Pbs/Any",
"FileSystem",
true);
Ogre::ArchiveVec library;
library.push_back(archiveLibrary);
library.push_back(archiveLibraryAny);
Ogre::Archive *archivePbs =Ogre::ArchiveManager::getSingletonPtr()->load(
dataFolder+
"Hlms/Pbs/" + shaderSyntax,
"FileSystem",
true);
library.push_back(archivePbsLibraryAny);
Ogre::HlmsPbs *hlmsPbs =
OGRE_NEW Ogre::HlmsPbs(archivePbs,&library);
Ogre::Root::getSingleton().getHlmsManager()->registerHlms(hlmsPbs);
library.pop_back();
7. 初始化资源组,定位资源
Ogre::ResourceGroupManager::getSingleton().addResourceLocation("C:/Users/aa/Documents/ogre/Samples/Media/packs/DebugPack.zip",
"Zip");
Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
8. 创建物体,添加到场景图中,并设置位置。
Ogre::Item *pItem = sceneManager->createItem("Cube_d.mesh", Ogre::ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);
Ogre::SceneNode *pSceneNode =sceneManager->getRootSceneNode();
pSceneNode->attachObject(pItem);
pSceneNode->setPosition(0.0,0.0, 0.0);
9. 开始渲染
while (true)
{
root->renderOneFrame();
}
总结一下:启动流程主要分为几个步骤:1.创建渲染窗口;2加载HLMS系统,3加载网格数据并添加到场景中。
相关文章推荐
- Ogre2.1 分析笔记(四) 渲染流程(一)
- Ogre2.1 分析笔记(五) 渲染流程(二)
- UI笔记_程序启动流程
- [国嵌笔记][029][ARM处理器启动流程分析v2]
- Android Hello world程序再分析【Android程序的启动流程】
- Ogre2.1 分析笔记(六) 合成器脚本分析
- Ogre2.1 分析笔记(一)
- MFC 程序启动流程分析
- CC2541之SimpleBLEPeripheral程序流程分析 -- 01.启动和事件轮询
- [Android6.0] 启动流程分析(从开机到第一个程序)
- Linux 启动流程即init程序分析--2
- ARM学习笔记012之mini2440上电的启动和初始化程序分析(即Bootloader分析)
- 【鸟哥的linux私房菜-学习笔记】Linux 的启动流程分析
- Cocos2d-x之 IOS工程平台程序启动流程分析
- android系统启动流程之init.rc详细分析笔记
- OGRE启动顺序--以及官方示例程序分析
- Linux 学习笔记_5_Linux引导流程解析_2_inittab文件剖析及系统启动流程分析
- linux+shell编程 笔记 启动关机的流程与加载程序
- [笔记]架构探险-从零开始写JavaWeb框架-2.1. 之使框架具有aop特性-aop框架加载与切面运行流程分析
- Ogre2.1 分析笔记(三)-场景图结构