zoukankan      html  css  js  c++  java
  • OGRE里mesh和submesh的关系

    实体(Entity)是场景中可移动对象的实例,它可以是一辆车、一个人、一条狗等等,实体(Entity)在世界(World)场景中不一定非要一个固定的坐标位置。

    实体(Entities)是以网格(Meshes)作为自身基础的,网格(Mesh)对象包括了一整套用来描述自身模型的数据,在广域范围(World Scale)内,网格(Mesh)对象相对比较小。多个实体(Entities)可以共用一种网格,比如,你常常会在一个场景下创建同一种对象的多个拷贝。

    你可以通过调用SceneManager::createEntity方法创建一个实体(Entity),然后,给该实体(Entity)命名,并且将与其相关的网格(Mesh)对象关联起来(比如:“muscleboundhero.mesh”)。场景管理器(SceneManager)会通过“MeshManager”这种资源管理器(Resource Manager)为你加载该网格(Mesh),每类网格(Mesh)只会被加载一次。

    只有当你将实体(Entities)与一个场景结点(SceneNode)关联起来后,该实体(Entities)才真正成为了场景中的一部分。通过关联不同的实体(Entities)到不同的场景结点(SceneNodes),你可以在实体(Entities)之间创建出复杂的位置及方向的继承关系。你可以通过修改场景结点(SceneNodes)的位置来改变与之关联的实体(Entity)的位置。

    当网格(Mesh)被加载后,与该网格(Mesh)相关的材质(Materials)数据也会随之加载。一类网格(Mesh)可以包含多种材质(Material)数据,因为一个网格的不同部分可能采用了不同种的材质(Materials)。任何在网格(Mesh)基础上创建的实体,会自动采用该网格(Mesh)上所采用的默认的材质(Materials)。当然,你也可以为这些相同的实体分配不同的纹理(Textures)。

    想要理解如何分配不同的纹理(Textures),你必须首先理解所有的网格(Mesh)对象实际上是由子网格对象(SubMesh)构成的,每个子网格对象(SubMesh)代表了网格(Mesh)对象的一部分,该部分只能使用一种材质(Meterial)。如果一个网格(Mesh)只采用了一种材质(Material),那么,它可能只包含了一个子网格(SubMesh)。

    当基于网格(Mesh)创建出一个实体(Entity)时,该实体(Entity)可能由多个子实体(SubEntity)构建而成,子实体(SubEntity)与网格(Mesh)中的子网格(SubMesh)一一对应。你可以通过调用Entity::getSubEntity方法获得子实体(SubEntity)。一旦你得到子实体(SubEntity)的指针,你可以通过调用setMaterialName方法改变其材质(Material)。通过这种方法,你可以改变你所创建的实体(Entity)的默认材质(Materials),从而使你创建出来的实体(Entity)与众不同。

    原文:http://www.cnblogs.com/lizhengjin/archive/2010/11/01/1866023.html


    作者:leisure
    原文出自:http://www.cnblogs.com/leisure/
    感谢园子,感谢各位支持。本文版权归伟征和博客园共有,欢迎转载@ 但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    只是想分享,欢迎拍砖!促进我成长

  • 相关阅读:
    C++标准转换运算符(2)
    C++标准转换运算符(1)
    未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于……
    我的第一篇博客
    C语言C语言程序
    C语言基本运算符
    C语言流程控制
    C语言关键字、标识(zhi)符、注释
    msado15.dll版本引发的离奇故障
    mySQL错误: The used table type doesn't support FULLTEXT indexes
  • 原文地址:https://www.cnblogs.com/leisure/p/2568915.html
Copyright © 2011-2022 走看看