X-Git-Url: http://git.lukelau.me/?p=opengl.git;a=blobdiff_plain;f=material.cpp;h=a1d44beb6d07929865ee5309b6916f4ab109d951;hp=e1fb5c3a391605fe4c118db74b594cb39358b0d3;hb=45e43c5d0b6a1415185211128d82190fd19c3fe9;hpb=83eb84c159c8ec75cda9fbeb05e3d5746b54ad53 diff --git a/material.cpp b/material.cpp index e1fb5c3..a1d44be 100644 --- a/material.cpp +++ b/material.cpp @@ -49,43 +49,52 @@ Material::Texture::Texture(const aiString fileName, const aiScene &scene) { glTexImage2D(GL_TEXTURE_2D, 0, img.internalFormat(), img.width(), img.height(), 0, img.format(), img.type(), img.data()); } + // magnifying - no bigger mipmap available, so use linear filtering + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + // minifying - use a linear blend of two mipmaps + // which are themselves filtered linearly + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glGenerateMipmap(GL_TEXTURE_2D); } void Material::bind() const { if (ambientOcclusion != nullptr) { - glUniform1i(glGetUniformLocation(progId, "material.albedoMap"), 0); + glUniform1i(glGetUniformLocation(progId, "mat.albedoMap"), 0); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, albedo->texId); - glUniform1i(glGetUniformLocation(progId, "material.hasAlbedo"), 1); + glUniform1i(glGetUniformLocation(progId, "mat.hasAlbedo"), 1); } else { - glUniform1i(glGetUniformLocation(progId, "material.hasAlbedo"), 0); + glUniform1i(glGetUniformLocation(progId, "mat.hasAlbedo"), 0); } if (normal != nullptr) { - glUniform1i(glGetUniformLocation(progId, "material.normalMap"), 1); + glUniform1i(glGetUniformLocation(progId, "mat.normalMap"), 1); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, normal->texId); - glUniform1i(glGetUniformLocation(progId, "material.hasNormal"), 1); + glUniform1i(glGetUniformLocation(progId, "mat.hasNormal"), 1); } else { - glUniform1i(glGetUniformLocation(progId, "material.hasNormal"), 0); + glUniform1i(glGetUniformLocation(progId, "mat.hasNormal"), 0); } if (metallicRoughness != nullptr) { - glUniform1i(glGetUniformLocation(progId, "metallicRoughnessMap"), 2); + glUniform1i(glGetUniformLocation(progId, "mat.metallicRoughnessMap"), 2); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, metallicRoughness->texId); - glUniform1i(glGetUniformLocation(progId, "material.hasMetallicRoughness"), 1); + glUniform1i(glGetUniformLocation(progId, "mat.hasMetallicRoughness"), 1); } else { - glUniform1i(glGetUniformLocation(progId, "material.hasMetallicRoughness"), 0); + glUniform1i(glGetUniformLocation(progId, "mat.hasMetallicRoughness"), 0); } if (ambientOcclusion != nullptr) { - glUniform1i(glGetUniformLocation(progId, "aoMap"), 3); + glUniform1i(glGetUniformLocation(progId, "mat.aoMap"), 3); glActiveTexture(GL_TEXTURE3); glBindTexture(GL_TEXTURE_2D, ambientOcclusion->texId); - glUniform1i(glGetUniformLocation(progId, "material.hasAo"), 1); + glUniform1i(glGetUniformLocation(progId, "mat.hasAo"), 1); } else { - glUniform1i(glGetUniformLocation(progId, "material.hasAo"), 0); + glUniform1i(glGetUniformLocation(progId, "mat.hasAo"), 0); } }