-void Model::loadModel(const std::string &file) {
- Assimp::Importer importer;
- const aiScene *scene = importer.ReadFile(file,
- aiProcess_Triangulate | aiProcess_PreTransformVertices |
- aiProcess_GenNormals);
+ for (unsigned int i: meshIndices) {
+ const Mesh &mesh = meshes[i];
+ glBindVertexArray(mesh.vao);
+
+ Material material = materials[mesh.materialIndex];
+ material.bind();
+
+ glUniform1i(glGetUniformLocation(progId, "irradianceMap"), 4);
+ glActiveTexture(GL_TEXTURE4);
+ glBindTexture(GL_TEXTURE_CUBE_MAP, skybox.getIrradianceMap());
+
+ glUniform1i(glGetUniformLocation(progId, "prefilterMap"), 5);
+ glActiveTexture(GL_TEXTURE5);
+ glBindTexture(GL_TEXTURE_CUBE_MAP, skybox.getPrefilterMap());
+
+ glUniform1i(glGetUniformLocation(progId, "brdfMap"), 6);
+ glActiveTexture(GL_TEXTURE6);
+ glBindTexture(GL_TEXTURE_2D, skybox.getBRDFMap());
+
+ glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(m));
+
+ glDrawElements(GL_TRIANGLES, mesh.numIndices, GL_UNSIGNED_INT, 0);
+ }
+ for (Node *child: children) child->draw(meshes, materials, skybox, m);
+}
+
+Model::Model(const std::string &path, Program p): program(p) {
+ glUseProgram(p.progId);
+
+ const aiScene *scene = importer.ReadFile(path,
+ aiProcess_Triangulate | aiProcess_CalcTangentSpace | aiProcess_GenNormals);