Learn OpenGL:模型加载
Assimp
- Scene对象保存所有场景模型数据,其中有根节点(树形结构)
- Scene下的mMeshes数组储存了真正的Mesh对象,节点中的mMeshes数组保存的只是场景中Mesh数组的索引
- Mesh对象本身包含了渲染所需要的所有相关数据:顶点位置、法向量、纹理坐标、面(Face)和物体的材质(Material)
- Face对象包含了顶点的索引,IBO
- Material对象可以获取物体的材质属性,主要是材质类型和路径
网格
Mesh
类包含顶点数组、顶点索引数组、贴图数组。构造时生成VAO、VBO、IBO。Mesh
类还有使用指定的Shader
的绘制方法。在绘制方法中,首先遍历贴图数组,逐个激活纹理单元并绑定贴图,最后使用索引进行绘制
模型
Model
类包含网格数组和模型所在文件夹路径。构造时载入模型。其核心是通过Assimp::Importer
类的ReadFile
方法获得指向Scene
的常指针使用前序遍历,从根节点开始处理每个节点的
Mesh
。注意节点保存的是索引,获取节点的Mesh
应该是scene->mMeshes[node->mMeshes[i]]
解析
Mesh
对象里的顶点属性、顶点索引和材质。注意Mesh
里保存的也是索引,获取Material
对象应该是scene->mMaterials[mesh->mMaterialIndex]
Material
对象中含有多种贴图以及对应路径,这里的贴图路径都已经改为了相对于模型的,加载时路径为模型文件夹路径\贴图路径
。为了提高加载速度,使用缓存保存加载过的贴图,通过比较路径即可知道是不是同一个贴图。
相关文章