OGRE 学习笔记(启动详解 + 实体的加载与显示)
来源:互联网 发布:centos 7配置lamp环境 编辑:程序博客网 时间:2024/06/04 18:49
http://www.cnblogs.com/wanghao111/archive/2009/06/07/1498130.html
#include "stdafx.h"
#ifdef _DEBUG
#pragma comment(lib,"ogremain_d.lib")
#else
#pragma comment(lib,"ogremain.lib")
#endif
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
{
using namespace Ogre;
try
{
/// Root的构造函数里会创建所有Factory以及Manager
/// 这里的3个参数,都是可以为空的(不是省略).
/// 第1个参数指明了插件配置的文件名. 这个文件里指明了我们将要使用的图形驱动(DX or GL)等DLL.
/// 既然是图形程序,所以肯定要有图形驱动了,如果这个参数为空,那么我们必须手动去加载图形驱动.
/// 第2个参数指明了OGRE的图形驱动配置文件。
/// 这个参数实际上是在调试的时候使用的,发布版本的时候肯定是不要它的.
/// 它在Root里的ShowDialg里使用,用来动态的配置当前要使用的图形驱动.
/// 如果我们可以确定我们要使用的图形驱动,完全可以配置我们自己的图形驱动. 具体代码可以参考下面.
/// 第3个参数指定了我们要使用的LOG文件名
Root * root = new Root("",
"",
"");
/// 我们手动加载图形驱动
#ifdef _DEBUG
root->loadPlugin("Plugins/RenderSystem_Direct3D9_d");
#else
root->loadPlugin("Plugins/RenderSystem_Direct3D9");
#endif
/// 由于OGRE的资源加载都由ResourceGroupManager来管理,不通过WINDOWS直接管理.
/// 所以,要正常使用OGRE的资源加载,我们还得把我们的资源目录给加到这个Manager里去.
/// 说白了,就是资源的环境路径.
/// 最起码,当前目录是要加的吧 ^_^
/// 这里也有3个参数。
/// 第1个参数指明了我们要加入的资源的相对目录名
/// 第2个参数指明了我们要加入的资源属于什么资源包。
/// 这个参数比较诡异,到底这个参数要依据什么原则来填写呢。
/// 其实这个参数的名字OGRE的代码里已经定义好了.
/// 如果是文件系统包呢,就查看FileSystemArchiveFactory这个类的定义里的createInstance,名字为FileSystem
/// 如果是ZIP压缩包呢,就查看ZipArchiveFactory这个类的定义里的createInstance,名字为Zip
/// 也就是说,这个名字必须以ArchiveFactory的派生类里定义的为准,否则肯定会出错地.
/// 第3个参数就比较简单了,可以随便填写,它只是对资源做一个逻辑上的分类.
ResourceGroupManager::getSingleton().addResourceLocation(
".", "FileSystem", "General");
ResourceGroupManager::getSingleton().addResourceLocation(
"media", "FileSystem", "General");
/// 做完以上这步,我们需要把这些资源路径里的文件信息都提取出来,以便加速查找.
/// 下面这个函数就是干这个苦差事的.
ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
/// 刚刚不是说了吗,我们把Root里的第二个参数给留空了,也就是说我们得自己指定一个RenderSystem,
/// 以及给它配置属性
/// 这里我们就用在Plugins里加载进OGRE里的第一个RenderSystem,我这里是DX
RenderSystem * render_system = *root->getAvailableRenderers()->begin();
/// 设置为窗口模式
render_system->setConfigOption("Full Screen","No");
/// 把这个RenderSystem给设为系统默认的
root->setRenderSystem(render_system);
/// 好了, 有了RenderSystem,我们就可以初始化我们的Root了.(其实就是创建窗口的过程)
/// 这里我们把RenderSystem的名字也显示在窗口的标题栏中.
RenderWindow *render_win = root->initialise(true,String("my simple orge window,rendersystem : ") + render_system->getName());
/// 场景的渲染,SceneManager必须创建一个,这个就是我们的游戏舞台了
SceneManager * scene_mgr = root->createSceneManager(ST_GENERIC, "my scene");
/// 设置灯光的亮度
scene_mgr->setAmbientLight(ColourValue(1,1,1));
/// 场景设置好了,但必须还得有个观察者,这个观察者在这里就是Camera
Camera * camera = scene_mgr->createCamera("my camera");
camera->setPosition(Vector3(0,0,500));
camera->lookAt(Vector3(0,0,-300));
camera->setNearClipDistance(5);
/// 有了观察者,但我们怎么看到场景的内容呢?
/// 我们还得需要一个眼睛,在这里叫做Viewport
Viewport* vp = render_win->addViewport(camera);
vp->setBackgroundColour(ColourValue(0,0,0));
/// 这里设置camera的图形比例,必须设置,否则图象会变形
camera->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
/// 我们通过例子里的资源模型ogrehead来做个演示
Entity *ent = scene_mgr->createEntity("Robot","ogrehead.mesh");
SceneNode *node = scene_mgr->getRootSceneNode()->createChildSceneNode("RobotNode");
node->setPosition(50,30,0);
node->attachObject(ent);
root->startRendering();
delete root;
}
catch (Ogre::Exception & e)
{
::MessageBox( NULL,
e.getFullDescription().c_str(),
"An exception has occured!",
MB_OK | MB_ICONERROR | MB_TASKMODAL);
}
}
- OGRE 学习笔记(启动详解 + 实体的加载与显示)
- OGRE 启动详解 + 实体的加载与显示
- OGRE资源相关分析 + OGRE 启动详解 + 实体的加载与显示
- OGRE启动顺序[学习笔记]
- ogre的初始化与启动以及显示对象设置
- Ogre学习笔记(2):Mesh的加载
- ogre学习笔记(启动篇)
- Ogre源码分析与学习笔记-0
- Ogre源码分析与学习笔记-1
- Ogre Mesh的加载
- Ogre Mesh的加载
- os学习笔记二(x86的启动加载和分区)
- ogre的启动顺序
- OGRE的启动
- 【笔记】八、OGRE启动顺序
- OGRE学习笔记
- OGRE学习笔记
- OGRE学习笔记
- Google笔试题
- 网站页面汉字乱码解决方案
- Android HttpClient网络通信
- 华为归来
- NAT 穿透
- OGRE 学习笔记(启动详解 + 实体的加载与显示)
- 没什么好写的
- 可重入、异步信号安全和线程安全
- SVN版本控制器的安装和配置
- 深入理解JVM
- pku2914(求最小割)
- java发https请求,证书配置
- 海量空间数据库实施策略-栅格数据 2
- 先验概率与后验概率及贝叶斯公式