Ogre: 建立一个简单的框架——添加模型
[转载请保证内容的完整性和正确性]
建立一个简单的框架——添加模型
大多数Ogre安装教程后面都会附加一段代码,通过一个ExampleApplication来测试是否正确安装,如果看到一个Ogre的头就说明正确安装了,但我们不能做任何修改。我们需要重写其中的一些方法,才能构建自己的游戏。
这里的Listener和Application继承自ExampleListener/Application,当然你也可以独立实现,但是我觉得实在没必要,因为绝大多数内容在今后都会用到。
我的编程环境:Windows8.1 ;Visual Studio 2012 ;Ogre 1.8.1
建立一个Application类
Application可以说是游戏的入口,继承自ExampleApplication类。
1 //DemoApplication.h 2 class DemoApplication : public ExampleApplication { 3 public: 4 DemoApplication(void); 5 ~DemoApplication(void); 6 protected: 7 void createScene(void); 8 };
修改main为:
1 int main() { 2 DemoApplication app; 3 app.go(); 4 return 0; 5 }
这时运行代码,可以看到黑色的窗口,并且能够按ESC键退出。
在场景中添加一个模型
在这里首先要说明两个概念:实体和场景节点。
一个实体可以理解为一个3D模型,我们将要添加的机器人是一个实体,但是灯光、摄像机等不是一个实体。
一个实体只有与一个场景节点绑定后才会被渲染,场景节点可以绑定多个实体,或者非实体(如光照模型),个人认为它的作用类似于 OpenGL 中的 pushMatrix() 和 popMatrix() 。关于场景节点会在后面的章节详细叙述。
接下来我们实现添加灯光和一个机器人。在 createScene 方法中添加以下代码:
1 //DemoApplication.cpp 2 //添加灯光效果 3 mSceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5)); 4 Light* l = mSceneMgr->createLight("MainLight"); 5 l->setPosition(20, 80, 50); 6 7 //在当前场景管理器中创建一个对象 8 Entity* ent = mSceneMgr->createEntity("Robot", "robot.mesh"); 9 //在场景管理器的根节点下创建一个名为“RobotNode”的场景节点 10 SceneNode* node = mSceneMgr->getRootSceneNode()->createChildSceneNode("RobotNode"); 11 //将实体绑定到场景节点上 12 node->attachObject(ent);
这时运行代码,可以看到一个机器人,并且可以用WASD移动摄像机,鼠标旋转视角。这些是ExampleFrameListener的方法实现的。
关于mesh文件
mesh文件和obj、fbx一样,是3D模型的一种格式。OgreSDK中自带一些mesh文件,我们也可以将普通的3D模型文件通过3DMAX或者MAYA转换为mesh文件,只需要安装相应的插件即可。
如3DMAX中应安装OgreMax插件。