转自:
如果新开始写一个3D渲染引擎,Mesh应该是一个很好的切入点。当一个看似简单的Mesh渲染到窗口时,说明引擎的架构已经确定,并验证了。想了解Ogre内部的机制, 可以先看看Mesh的加载过程,这里主要涉及到Resource是如何管理的,Material是怎样处理的,Resource和HardwareBuffer是如何关联的。对于前面教程代码的执行过程做一下分析:
创建一个Entity(加载Mesh及其相关的Material)的调用流程如下:
SceneManager::createEntity()
->SceneManager::createMovableObject()
->MovableObjectFactory::createInstance()
->EntityFactory::createInstanceImpl()
主要的操作就在这个函数中完成,其中第一步为加载Mesh,Mesh包含若干SubMesh,此时并不加载相关的材质,只是记录所关联的材质名称;
-->MeshManager::load()
-->Mesh::load()
-->Mesh::loadImpl()
-->MeshSerializer::importMesh()
第二步为new一个Entity对象,其中包含创建SubEntity对象并加载相关的“材质”。
-->Entity::Entity()
-->Entity::buildSubEntityList()
-->SubEntity::setMaterialName()
-->Material::loadImpl()
-->Material::compile()
下面是相关的一个class的UML图: