1 #include "material.hpp"
4 Material::Material(const aiMaterial &ai, GLuint progId): progId(progId) {
6 ai.GetTexture(aiTextureType_DIFFUSE, 1, &path);
7 albedo = new Texture(std::string(path.C_Str()));
10 ai.GetTexture(aiTextureType_NORMALS, 0, &path);
11 normal = new Texture(std::string(path.C_Str()));
14 ai.GetTexture(aiTextureType_UNKNOWN, 0, &path);
15 metallicRoughness = new Texture(std::string(path.C_Str()));
18 ai.GetTexture(aiTextureType_LIGHTMAP, 0, &path);
19 ambientOcclusion = new Texture(std::string(path.C_Str()));
22 Material::Texture::Texture(const std::string &fileName) {
23 glGenTextures(1, &texId);
24 glBindTexture(GL_TEXTURE_2D, texId);
25 Image img("models/" + fileName);
26 glTexImage2D(GL_TEXTURE_2D, 0, img.internalFormat(), img.width(), img.height(), 0, img.format(), img.type(), img.data());
27 glGenerateMipmap(GL_TEXTURE_2D);
30 void Material::bind() const {
31 glUniform1i(glGetUniformLocation(progId, "albedoMap"), 0);
32 glActiveTexture(GL_TEXTURE0);
33 glBindTexture(GL_TEXTURE_2D, albedo->texId);
35 glUniform1i(glGetUniformLocation(progId, "normalMap"), 1);
36 glActiveTexture(GL_TEXTURE1);
37 glBindTexture(GL_TEXTURE_2D, normal->texId);
39 glUniform1i(glGetUniformLocation(progId, "metallicRoughnessMap"), 2);
40 glActiveTexture(GL_TEXTURE2);
41 glBindTexture(GL_TEXTURE_2D, metallicRoughness->texId);
43 glUniform1i(glGetUniformLocation(progId, "aoMap"), 3);
44 glActiveTexture(GL_TEXTURE3);
45 glBindTexture(GL_TEXTURE_2D, ambientOcclusion->texId);