[转载请保证内容的完整性和正确性]
建立一个简单的框架——关于场景节点
如果我们要做一个类似于《跑跑卡丁车》的游戏,人物模型是需要随着卡丁车模型一起进行各种变换的(平移、旋转等),我们需要分别计算两个关联的模型的位置吗?这样能解决问题,但是太麻烦了,利用Ogre的场景节点可以很方便地解决这种问题。
添加一个新的模型
之前添加的模型都是由3DMAX等软件导出的模型,接下来我们利用Ogre生成一个Cube模型。
1 //DemoManager.cpp 2 Ogre::ManualObject* cube = sm->createManualObject("cube"); 3 cube->begin("cubeMaterial"); 4 cube->position(-10, -10, -10); 5 cube->colour(0.0, 0.0, 0.0); 6 cube->position(10, -10, -10); 7 cube->colour(1.0, 0.0, 0.0); 8 cube->position(10, -10, 10); 9 cube->colour(1.0, 0.0, 1.0); 10 cube->position(-10, -10, 10); 11 cube->colour(0.0, 0.0, 1.0); 12 cube->position(-10, 10, -10); 13 cube->colour(0.0, 1.0, 0.0); 14 cube->position(10, 10, -10); 15 cube->colour(1.0, 1.0, 0.0); 16 cube->position(10, 10, 10); 17 cube->colour(1.0, 1.0, 1.0); 18 cube->position(-10, 10, 10); 19 cube->colour(0.0, 1.0, 1.0); 20 21 cube->triangle(0, 2, 1); 22 cube->triangle(0, 2, 3); 23 cube->triangle(3, 4, 0); 24 cube->triangle(3, 7, 4); 25 cube->triangle(4, 7, 6); 26 cube->triangle(4, 6, 5); 27 cube->triangle(5, 2, 1); 28 cube->triangle(5, 6, 2); 29 cube->triangle(0, 4, 1); 30 cube->triangle(5, 1, 4); 31 cube->triangle(3, 6, 7); 32 cube->triangle(3, 2, 6); 33 cube->end();
绑定场景节点
我们在机器人所在的场景节点下创建一个子节点,并绑定这个cube。
1 //DemoManager.cpp 2 node1 = node->createChildSceneNode("CubeNode"); 3 node1->attachObject(cube); 4 node1->translate(0, -10, 0);
这时运行代码可以发现cube随着机器人一起移动。
为cube添加键盘事件
我们设置一个按键,用以改变控制对象,在机器人和cube之间切换。
因为cube是机器人的子节点,所以cube会随着机器人移动,而当我们控制cube进行移动的时候,机器人不会移动,并且cube的移动方向是相对于机器人的,正如前面所说。场景节点的作用很像是OpenGL中的pushMatrix和popMatrix。
到这里,一个基本的框架就完成了,接下来的工作就是不断丰富这个框架。
这部分的源码点这里。