一下内容是对OGRE基础教程的总结,大家可以先阅读中级教程1---9的内容,然后再回过头来浏览这片文章,否则可能会有很多看不懂的地方。
OGRE基础教程1
主要讲了几个OGRE中的基本概念:
1. SceneManager:所有屏幕上可见的东西都由SceneManager来管理;有多种类型的SceneManager,分别用来渲染Terrain、BSP等等。
2. Entity:初步的理解一个Entity代表一个Mesh(可以含有动画),Light,Camera,Particle,Billboard不用Entity表示。Entity不能直接加到场景中,必须先attach到一个SceneNode上,SceneNode管理位置和方向。
3. SceneNode:SceneNode管理位置和方向;需要注意子节点的是在父节点的空间中;一个SceneNode可以管理多个对象。
4. OGRE中的Entity和SceneNode都必须指定全局唯一的名称。
OGRE基础教程2
主要是讲OGRE中的Light和Shadow的设置
1. 要开启阴影:首先要调用SceneManager:: setShadowTechnique(),然后对于需要开启的Entity调用Entity:: setCastShadows()。
2. 灯光和摄像机都需要由SceneManager来创建,分别是SceneManager::createLight()和SceneManager::createCamera()。
OGRE基础教程3
主要讲Terrain场景,Sky和Fog
1. 为了处理Terrain场景,首先要选择相应类型的SceneManager,这里选择了“ST_EXTERIOR_CLOSE”类型。这个操作是通过Root::createSceneManager()完成的。此操作创建并返回了一个TerrainSceneManager指针,同时创建了一个HeightmapTerrainPageSource对象。
2. 加载地形是通过:mSceneMgr->setWorldGeometry( "terrain.cfg" );语句来完成的。
3. 天空是通过SceneManager::setSkyBox()等函数完成的;
4. Fog是通过SceneManager::setFog()完成。
OGRE基础教程4
引入了FrameListener的概念
对于FrameListener的初步理解:OGRE在初始化完成之后,调用Root::startRendering()就启动了渲染循环。FrameListener是为了给应用程序处理各种事件的机会,最典型的就是frameStarted()和frameEnded()。
此教程的TutorialFrameListener从ExampleFrameListener派生,后者又从FrameListener和KeyListener派生,所以它可以处理按键事件。
OGRE基础教程5
主要介绍键盘监听和鼠标监听的使用方法。
OIS的KeyListener接口提供了两个纯虚函数。第一个是keyPressed函数(每次按下某个键时调用它),还一个是keyReleased(每次离开某个键时调用它)。传入这些函数的参数是一个KeyEvent,它包含被按下/释放的按键的键码。
eg:
在ExampleFrameListener的构造函数里已经取得了OIS的mMouse和mKeyboard对象。我们调用这些输入对象的setEventCallback方法,把TutorialFrameListener注册成一个监听器。
mMouse->setEventCallback(this);
mKeyboard->setEventCallback(this);
然后再处理鼠标键盘的响应响应时间包括keyPressed(),KeyDown(),MovePressed(),MoveDown().
bool keyPressed(const OIS::KeyEvent &e) { switch (e.key) { case OIS::KC_ESCAPE: mContinue = false; break; } return true; }
OGRE基础教程6
CEGUI简介:
1. Crazy Eddies GUI系统是一个为不具备或缺乏用户界面制作功能的图形API或引擎提供免费用户界面支持的开源的库。这个使用c++编写的库是针对那些想制作优秀的游戏却又没有GUI(图形用户界面)子系统的专业游戏开发者。确信已经在debug配置的中添加 2
2. 'CEGUIBase_d.lib' 和 'OgreGUIRenderer_d.lib' 库。在Visual C++中添加依赖,依次点击:项目 -> 属性 -> 配置属性 -> 链接。
3. CEGUI日志的地方,一般都设置为Informative模式的。其具有四种模式:Standard, Errors, Informative 和 Instane。
创建一个新的CEGUI系统,使用“TaharezLook”来设置图(sheme)与鼠标指针,使用“BlueHighway-12”来设置字体。
CEGUI::SchemeManager::getSingleton().loadScheme((CEGUI::utf8*)"TaharezLookSkin.scheme");
mGUISystem->setDefaultMouseCursor((CEGUI::utf8*)"TaharezLook",(CEGUI::utf8*)"MouseArrow");
CEGUI::MouseCursor::getSingleton().setImage("TaharezLook","MouseMoveCursor");
mGUISystem->setDefaultFont((CEGUI::utf8*)"BlueHighway-12");
mEditorGuiSheet=CEGUI::WindowManager::getSingleton().createWindow((CEGUI::utf8*)"DefaultWindow",
(CEGUI::utf8*)"Sheet");
mGUISystem->setGUISheet(mEditorGuiSheet);
OGRE基础教程7
1 CEGUI是一个功能全面的GUI库,它能够植入像Ogre这样的3D应用程序(当然也支持纯DirectX和OpenGL)。就像Ogre只是一个图像库一样(不做声音、物理等其它的事情),CEGUI只是一个GUI库,意味着既不自己做渲染,也不与任何鼠标键盘事件挂钩。实际上,为了让CEGUI能渲染,你必须提供一个渲染器给它(包含在SDK的OgreGUIRenderer库)。而为了让它能够理解鼠标键盘事件,你必须手工地把它们注入系统。
2初始化 CEGUI,createScene函数并添加如下代码:
mRenderer = new CEGUI::OgreCEGUIRenderer(mWindow, Ogre::RENDER_QUEUE_OVERLAY, false, 3000, mSceneMgr); mSystem = new CEGUI::System(mRenderer);3选择了一个皮肤:
CEGUI::SchemeManager::getSingleton().loadScheme((CEGUI::utf8*)"TaharezLookSkin.scheme");
4接下来我们要做的事件就是设置默认鼠标指针图像和默认字体:
mSystem->setDefaultMouseCursor((CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow");
mSystem->setDefaultFont((CEGUI::utf8*)"BlueHighway-12");
5注入键盘事件
CEGUI不会自己处理输入,它不读取鼠标的移动和键盘的输入。相反地,它依赖用户把按键鼠标事件注入到系统。接下来我们要做的就是处理这些事件。若你正使用CEGUI,你需要以缓冲模式运行鼠标键盘,这样你就能直接获取事件并在它们发生时注入。找到keyPressed函数,并添加代码:
CEGUI::System *sys = CEGUI::System::getSingletonPtr();
sys->injectKeyDown(arg.key);
6转变和注入鼠标事件当我们注入KepUp和KepDown事件到CEGUI里时,我们不必转换键码。OIS和CEGUI为键盘输入使用相同的键码。但鼠标按钮却不是这样。在按下鼠标按钮注入到CEGUI时,我们需要写一个函数来把OIS的按钮ID转换为CEGUI的按钮ID。 7窗口、表单、组件介绍
CEGUI与其它多数GUI系统有所不同。在CEGUI里,所有能显示出来的东西都是CEGUI::Window类的一个子类,而且一个window可以有任意数量的子window。这样会导致一些奇怪的事情发生。你能在一个按钮里面放置另外一个按钮,虽然实际上不会这么干。我提这些的原因是,当你正寻找放在应用程序里的某个特殊的小部件时,它们都被称作Windows,而且可以通过访问Windows的函数来访问。
8事件
CEGUI里的事件是非常灵活的。它不是实现一个接收事件的接口,而是使用一种回调机制,把任何公共函数绑定成一个事件处理器(通过适当的方法签名)。不幸的是,这也意味着注册事件会比Ogre更麻烦。
OGRE基础教程8
始终牢记的视口类,虽然没有很多的功能本身,就是对所有食人魔渲染的关键。不要紧,你有多少SceneManagers创建或在每个场景管理器多少相机时,他们都将呈现给窗口,除非您设定每个摄像机你呈现口。也不要忘记清除你不使用的之前创造的视口!
OGRE基础教程8
从零开始
1开始之前,让我们站在更高的层次上看一下启动过程是如何工作的:
1. 创建Root对象。
2. 定义Ogre将要使用的资源。
3. 选择并设置渲染系统(即DirectX, OpenGL等)。
4. 创建渲染窗口(Ogre所处的窗口)。
5. 初始化你要使用的资源。
6. 用这些资源来建立一个场景。
7. 设置第三方库或插件。
8. 创建一些帧监听器。
9. 启动渲染循环
2带缓冲输入的疑难杂症
如果你没有如自己所希望那样在程序中获得输入缓冲,那么你需要检查以下这些事情:
1. 你在调用InputManager::createInputObject()函数创建输入设备时是否设置第二个参数(开启输入缓冲)为true?
2. 你是否为每个输入缓冲对象设置了一个setEventCallback()函数?
3. 是否有别的类调用了setEventCallback()函数?(注意:OIS仅仅允许一个事件回调给一个对象,你不能把一个事件回调给两个类处理.)
3清理
最后一件事是,当程序终止时,我们要对所创建的所有对象进行清理。为止,我们将按照与创建时相反的顺序来删除或销毁这些对象。
以上几个教程都使用“ogrenew/Samples/Common”目录下的ExampleApplication的简单框架,有必要对它做一下了解。