Ogre: 建立一个简单的框架——关于场景节点

[转载请保证内容的完整性和正确性]

建立一个简单的框架——关于场景节点

如果我们要做一个类似于《跑跑卡丁车》的游戏,人物模型是需要随着卡丁车模型一起进行各种变换的(平移、旋转等),我们需要分别计算两个关联的模型的位置吗?这样能解决问题,但是太麻烦了,利用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。

到这里,一个基本的框架就完成了,接下来的工作就是不断丰富这个框架。

这部分的源码点这里

posted on 2015-03-14 15:11  FKS143  阅读(519)  评论(0编辑  收藏  举报

导航