...
 
Commits (2)
    https://gitcode.net/cpp/LearnOpenGL/-/commit/ea40b886f5a272d277108471bbc4f8c153416d89 Fixed normal calculation in PBR shaders 2023-03-18T14:18:49+01:00 arby arbocz.marton@gmail.com https://gitcode.net/cpp/LearnOpenGL/-/commit/1257b69ebc878d1a2e18f5fae604582a7d34f03d Merge pull request #348 from arbmarton/fix_pbr_normals 2023-03-27T11:38:36+02:00 Joey de Vries JoeyDeVries@users.noreply.github.com Fixed normal calculation in PBR shaders
......@@ -10,12 +10,13 @@ out vec3 Normal;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
uniform mat3 normalMatrix;
void main()
{
TexCoords = aTexCoords;
WorldPos = vec3(model * vec4(aPos, 1.0));
Normal = mat3(model) * aNormal;
Normal = normalMatrix * aNormal;
gl_Position = projection * view * vec4(WorldPos, 1.0);
}
\ No newline at end of file
......@@ -151,6 +151,7 @@ int main()
0.0f
));
shader.setMat4("model", model);
shader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
}
}
......@@ -169,6 +170,7 @@ int main()
model = glm::translate(model, newPos);
model = glm::scale(model, glm::vec3(0.5f));
shader.setMat4("model", model);
shader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
}
......
......@@ -10,12 +10,13 @@ out vec3 Normal;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
uniform mat3 normalMatrix;
void main()
{
TexCoords = aTexCoords;
WorldPos = vec3(model * vec4(aPos, 1.0));
Normal = mat3(model) * aNormal;
Normal = normalMatrix * aNormal;
gl_Position = projection * view * vec4(WorldPos, 1.0);
}
\ No newline at end of file
......@@ -162,6 +162,7 @@ int main()
0.0f
));
shader.setMat4("model", model);
shader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
}
}
......@@ -180,6 +181,7 @@ int main()
model = glm::translate(model, newPos);
model = glm::scale(model, glm::vec3(0.5f));
shader.setMat4("model", model);
shader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
}
......
......@@ -10,12 +10,13 @@ out vec3 Normal;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
uniform mat3 normalMatrix;
void main()
{
TexCoords = aTexCoords;
WorldPos = vec3(model * vec4(aPos, 1.0));
Normal = mat3(model) * aNormal;
Normal = normalMatrix * aNormal;
gl_Position = projection * view * vec4(WorldPos, 1.0);
}
\ No newline at end of file
......@@ -252,6 +252,7 @@ int main()
-2.0f
));
pbrShader.setMat4("model", model);
pbrShader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
}
}
......@@ -271,6 +272,7 @@ int main()
model = glm::translate(model, newPos);
model = glm::scale(model, glm::vec3(0.5f));
pbrShader.setMat4("model", model);
pbrShader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
}
......
......@@ -10,12 +10,13 @@ out vec3 Normal;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
uniform mat3 normalMatrix;
void main()
{
TexCoords = aTexCoords;
WorldPos = vec3(model * vec4(aPos, 1.0));
Normal = mat3(model) * aNormal;
Normal = normalMatrix * aNormal;
gl_Position = projection * view * vec4(WorldPos, 1.0);
}
\ No newline at end of file
......@@ -297,6 +297,7 @@ int main()
-2.0f
));
pbrShader.setMat4("model", model);
pbrShader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
}
}
......@@ -316,6 +317,7 @@ int main()
model = glm::translate(model, newPos);
model = glm::scale(model, glm::vec3(0.5f));
pbrShader.setMat4("model", model);
pbrShader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
}
......
......@@ -10,12 +10,13 @@ out vec3 Normal;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
uniform mat3 normalMatrix;
void main()
{
TexCoords = aTexCoords;
WorldPos = vec3(model * vec4(aPos, 1.0));
Normal = mat3(model) * aNormal;
Normal = normalMatrix * aNormal;
gl_Position = projection * view * vec4(WorldPos, 1.0);
}
\ No newline at end of file
......@@ -389,6 +389,7 @@ int main()
-2.0f
));
pbrShader.setMat4("model", model);
pbrShader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
}
}
......@@ -408,6 +409,7 @@ int main()
model = glm::translate(model, newPos);
model = glm::scale(model, glm::vec3(0.5f));
pbrShader.setMat4("model", model);
pbrShader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
}
......
......@@ -10,12 +10,13 @@ out vec3 Normal;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
uniform mat3 normalMatrix;
void main()
{
TexCoords = aTexCoords;
WorldPos = vec3(model * vec4(aPos, 1.0));
Normal = mat3(model) * aNormal;
Normal = normalMatrix * aNormal;
gl_Position = projection * view * vec4(WorldPos, 1.0);
}
\ No newline at end of file
......@@ -424,6 +424,7 @@ int main()
model = glm::mat4(1.0f);
model = glm::translate(model, glm::vec3(-5.0, 0.0, 2.0));
pbrShader.setMat4("model", model);
pbrShader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
// gold
......@@ -441,6 +442,7 @@ int main()
model = glm::mat4(1.0f);
model = glm::translate(model, glm::vec3(-3.0, 0.0, 2.0));
pbrShader.setMat4("model", model);
pbrShader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
// grass
......@@ -458,6 +460,7 @@ int main()
model = glm::mat4(1.0f);
model = glm::translate(model, glm::vec3(-1.0, 0.0, 2.0));
pbrShader.setMat4("model", model);
pbrShader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
// plastic
......@@ -475,6 +478,7 @@ int main()
model = glm::mat4(1.0f);
model = glm::translate(model, glm::vec3(1.0, 0.0, 2.0));
pbrShader.setMat4("model", model);
pbrShader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
// wall
......@@ -492,6 +496,7 @@ int main()
model = glm::mat4(1.0f);
model = glm::translate(model, glm::vec3(3.0, 0.0, 2.0));
pbrShader.setMat4("model", model);
pbrShader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
// render light source (simply re-render sphere at light positions)
......@@ -508,6 +513,7 @@ int main()
model = glm::translate(model, newPos);
model = glm::scale(model, glm::vec3(0.5f));
pbrShader.setMat4("model", model);
pbrShader.setMat3("normalMatrix", glm::transpose(glm::inverse(glm::mat3(model))));
renderSphere();
}
......