Model
一個(gè)模型可以包含多個(gè)網(wǎng)格票髓,一個(gè)網(wǎng)格可能帶有多個(gè)對(duì)象攀涵,Model類的結(jié)構(gòu)如下:
class Model
{
public:
/* 成員函數(shù) */
Model(GLchar* path)
{
this->loadModel(path);
}
void Draw(Shader shader);
private:
/* 模型數(shù)據(jù) */
vector<Mesh> meshes;
string directory;
/* 私有成員函數(shù) */
void loadModel(string path);
void processNode(aiNode* node, const aiScene* scene);
Mesh processMesh(aiMesh* mesh, const aiScene* scene);
vector<Texture> loadMaterialTextures(aiMaterial* mat, aiTextureType type, string typeName);
};
Model類包含一個(gè)Mesh對(duì)象的向量,我們需要在構(gòu)造函數(shù)中給出文件的位置炬称。之后汁果,在構(gòu)造其中涡拘,它通過loadModel函數(shù)加載文件玲躯。私有方法都被設(shè)計(jì)為處理一部分的Assimp導(dǎo)入的常規(guī)動(dòng)作.同樣,我們儲(chǔ)存文件路徑的目錄鳄乏,這樣稍后加載紋理的時(shí)候會(huì)用到跷车。
函數(shù)Draw沒有什么特別之處,基本上是循環(huán)每個(gè)網(wǎng)格橱野,調(diào)用各自的Draw函數(shù)朽缴。
void Draw(Shader shader)
{
for(GLuint i = 0; i < this->meshes.size(); i++)
this->meshes[i].Draw(shader);
}