zoukankan      html  css  js  c++  java
  • 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。还有一大堆

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

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

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

     

     

  • 相关阅读:
    std::type_index(转)
    __sync_fetch_and_add系列(转)
    InterlockedIncrement函数详解(转)
    如何让服务端同时支持WebSocket和SSL加密的WebSocket(即同时支持ws和wss)?(转)
    Linux系统管理基础测试
    CentOS7.7源码包安装Cmake3.0
    Shell-三剑客(sed)
    问题-突然发现公司网站访问速度变的很慢很慢
    Linux基础命令之文件及目录管理
    Linux基础命令之进程管理
  • 原文地址:https://www.cnblogs.com/stefan/p/1754270.html
Copyright © 2011-2022 走看看