Added method to load normal maps and moved pbr to it's own function

This commit is contained in:
Warwick 2022-07-25 13:43:58 +01:00
parent 2cd954dc9a
commit cd382435a8
3 changed files with 22 additions and 13 deletions

View file

@ -26,7 +26,7 @@ uniform int tick;
uniform sampler2D texture_diffuse1; uniform sampler2D texture_diffuse1;
uniform sampler2D texture_diffuse2; uniform sampler2D texture_diffuse2;
uniform sampler2D texture_rma1; uniform sampler2D texture_rma1;
uniform sampler2D texture_normal1;
// PBR functions from learnOpenGL.com // PBR functions from learnOpenGL.com
const float PI = 3.14159265359; const float PI = 3.14159265359;
@ -70,16 +70,8 @@ float GeometrySmith(vec3 N, vec3 V, vec3 L, float roughness)
return ggx1 * ggx2; return ggx1 * ggx2;
} }
void main() vec3 PBR(vec3 albedo, float roughness, float metallic, float ao)
{ {
vec3 albedo;
albedo.r = pow(texture(texture_diffuse1, ourTexCoord).r, 2.2);
albedo.g = pow(texture(texture_diffuse1, ourTexCoord).g, 2.2);
albedo.b = pow(texture(texture_diffuse1, ourTexCoord).b, 2.2);
float roughness = texture(texture_rma1, ourTexCoord).r;
float metallic = texture(texture_rma1, ourTexCoord).g;
float ao = texture(texture_rma1, ourTexCoord).b;
// Establish ambient lighting // Establish ambient lighting
float ambientStrength = 0.1; float ambientStrength = 0.1;
@ -125,7 +117,18 @@ void main()
vec3 color = ambient + Lo; vec3 color = ambient + Lo;
color = color / (color + vec3(1.0)); color = color / (color + vec3(1.0));
color = pow(color, vec3(1.0/2.2)); return pow(color, vec3(1.0/2.2));
}
FragColor = vec4(color, 0.0);
void main()
{
vec3 albedo;
albedo.r = pow(texture(texture_diffuse1, ourTexCoord).r, 2.2);
albedo.g = pow(texture(texture_diffuse1, ourTexCoord).g, 2.2);
albedo.b = pow(texture(texture_diffuse1, ourTexCoord).b, 2.2);
float roughness = texture(texture_rma1, ourTexCoord).r;
float metallic = texture(texture_rma1, ourTexCoord).g;
float ao = texture(texture_rma1, ourTexCoord).b;
FragColor = vec4(PBR(albedo, roughness, metallic, ao), 0.0);
} }

View file

@ -42,6 +42,7 @@ void Mesh::setupMesh() {
void Mesh::draw(ShaderLoader &shader) { void Mesh::draw(ShaderLoader &shader) {
unsigned int diffuseNr = 1; unsigned int diffuseNr = 1;
unsigned int rmaNr = 1; unsigned int rmaNr = 1;
unsigned int normalNr = 1;
for (unsigned int i = 0; i < textures.size(); i++) { for (unsigned int i = 0; i < textures.size(); i++) {
// activate proper texture unit before binding // activate proper texture unit before binding
glActiveTexture(GL_TEXTURE0 + i); glActiveTexture(GL_TEXTURE0 + i);
@ -52,6 +53,8 @@ void Mesh::draw(ShaderLoader &shader) {
number = std::to_string(diffuseNr++); number = std::to_string(diffuseNr++);
else if (name == "texture_rma") else if (name == "texture_rma")
number = std::to_string(rmaNr++); number = std::to_string(rmaNr++);
else if (name == "texture_normal")
number = std::to_string(normalNr++);
shader.setInt((name + number).c_str(), i); shader.setInt((name + number).c_str(), i);
glBindTexture(GL_TEXTURE_2D, textures[i].id); glBindTexture(GL_TEXTURE_2D, textures[i].id);

View file

@ -97,6 +97,9 @@ Mesh Model::processMesh(aiMesh *mesh, const aiScene *scene) {
std::vector<Texture> diffuseMaps = loadMaterialTextures( std::vector<Texture> diffuseMaps = loadMaterialTextures(
material, aiTextureType_DIFFUSE, "texture_diffuse"); material, aiTextureType_DIFFUSE, "texture_diffuse");
textures.insert(textures.end(), diffuseMaps.begin(), diffuseMaps.end()); textures.insert(textures.end(), diffuseMaps.begin(), diffuseMaps.end());
std::vector<Texture> normalMaps =
loadMaterialTextures(material, aiTextureType_NORMALS, "texture_normal");
textures.insert(textures.end(), normalMaps.begin(), normalMaps.end());
// WARNING: As assimp updates to keep up with obj's mtl format // WARNING: As assimp updates to keep up with obj's mtl format
// aiTextureType_sheen may become incorrect. Using sheen because assimp maps // aiTextureType_sheen may become incorrect. Using sheen because assimp maps