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, Skybox s): program(p), skybox(s) {
+Model::Model(const std::string &path, Program p): program(p) {
glUseProgram(p.progId);
const aiScene *scene = importer.ReadFile(path,
root = new Node(*(scene->mRootNode), p.progId);
}
-void Model::draw() const {
+void Model::draw(Skybox skybox) const {
glUseProgram(program.progId);
root->draw(meshes, materials, skybox);
program.validate();