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)与众不同。

你可能感兴趣的:(sh)