zoukankan      html  css  js  c++  java
  • 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。

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

    这部分的源码点这里

  • 相关阅读:
    DB2 中like的通配符以及escape关键字定义转义字符的使用
    Java编译后产生class文件的命名规则
    在Servlet的GenericServlet类中为什么有两个init()方法
    Java Web开发笔记
    EL表达式
    将NSString转换编码集变为GBK或GB2312
    转,ios开源程序集
    整理 被appstore 拒绝审核通过的原因
    在程序中如何把两张图片合成为一张图片
    object c 操作date类型
  • 原文地址:https://www.cnblogs.com/fks143/p/4337598.html
Copyright © 2011-2022 走看看