• OGRE中 场景管理器,场景节点和实体


    场景管理器:在屏幕上显示的所有东西都是由场景管理器来管理。当您在

    场景中添加物体时,场景管理器会记录这些物体的位置。当您添加摄像机

    来观看某个场景时,场景管理器会记录摄像机的位置。当您添加平面、广

    告牌、灯光时,场景管理器同样会管理他们。 OGRE里有很多种场景管理

    器。有的场景管理器渲染地面,有的场景管理器渲染BSP表等等。

    场景节点:场景节点将持续跟踪与它绑在一起的实体的方位。当你创建了一

    个实体时,它直到与一个场景节点绑定后才会被渲染。同样,一个场景节点

    也不能单独的在屏幕上显示出来,只有与一个实体绑定后才能在屏幕上显示。
    场景节点可以绑定多个实体。例如在屏幕上有在行走的一个人物对象,并且

    希望这个对象产生发光效果,要实现这些,首先你需要创建一个场景节点,

    然后再创建一个人物对象的实体并与场景节点绑定在一起,之后你还需要创

    建一个光照模型也与这个场景节点绑定在一起。场景节点同样可以与其它场景

    节点绑定以描述更完整的对象。

    在场景中,场景节点的位置总是与它的父节点相关。每一个场景管理器都包含一个根节点。

    实体:一个实体是可以在场景中渲染的物体之一。您可以把实体理解为任何

    一个3D模型。一个机器人可以是一个实体,一条鱼可以是一个实体,大地草

    原可以是一个非常大的实体。灯光,摄像机,粒子,广告牌等不能成为实体。
    但在 Ogre 中你不能够直接将一个实体放入到场景中,而是将实体与场景节

    点绑在一起,这个场景节点则包括了实体的方位信息。

    01.

    为整个场景设置环境光,这样才可以看到要显示的内容,通过调用

    setAmbientLight函数并指定环境光的颜色就可以做到这些。指

    定的颜色由红、绿、蓝三种颜色组成,且每种色数值范围

    在 0 到 1 之间。

    mSceneMgr->setAmbientLight( ColourValue( 1, 1, 1 ) );

    02.

    创建一个 Entity ,通过调用 SceneManager 的 createEntity 方法来创建:

      Entity *ent1 = mSceneMgr->createEntity( "Robot", "robot.mesh" );

    03.

    创建一个场景节点来与它绑定在一起。既然每个场景管理器都有一个根节点,那我们就在根节点下创建一个场景节点。

    SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode" );

    04.

    将实体与场景节点绑定在一起
      node1->attachObject( ent1 );

    实体常用函数:

    Entity::setVisible

    Entity::isVisible

    Entity::getName

    Entity::getParentSceneNode

    场景节点深入了解:

    场景节点类同样相当复杂。场景节点能实现很多事情,所以我们只了解一些常用的。

    你可以利用getPosition或setPosition得到或者设定场景节点的位置 (总是和父节

    点相对的)。你可以利用translate函数来移动对象。

    场景节点不仅仅决定一个对象的位置,它还可以控制一个对象的缩放比例和旋转角

    度。你可以用scale函数来设置一个对象的缩放比例,还可以用yaw, roll, pitch函

    数来旋转对象。你可以用resetOrientation来还原你对对象进行的所有旋转。你还

    可以用setOrientation, getOrientation和rotate函数对对象进行高级旋转。四元

    数会在后面的教程里对大家讲解。

    你现在已经见过attachObject函数了。当你想对绑定到场景节点上的对象进行操作

    时,这些函数会很有帮助:numAttachedObjects, getAttachedObject(这个函

    数有很多版本), detachObject(同样很多版本), detachAllObjects。还有一大堆

    函数是来处理父节点和子节点的。

    由于所有的移动都是相对于父节点的,我们可以很容易的使两个节点一起移动。我

    们现在已经有这些代码在我们的程序里:

     

     

  • 相关阅读:
    应用js改变问章字体大小
    在北京实习的日子
    php算法
    SQL Server 查询处理中的各个阶段(SQL执行顺序)
    130 个你需要了解的 vim 命令
    分享一个检测用户是否用手机(Mobile)访问网站的 PHP 类
    使用apache自带日志分割模块rotatelogs,分割日志
    centos下lvs配置
    分享codeigniter框架,在zend studio 环境下的代码提示
    vi 常用命令
  • 原文地址:https://www.cnblogs.com/stefan/p/1754270.html
Copyright © 2020-2023  润新知