Fixed normal calculation in PBR shaders

This commit is contained in:
arby
2023-03-18 14:18:49 +01:00
parent 08b8de1fdb
commit ea40b886f5
12 changed files with 28 additions and 6 deletions

View File

@@ -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);
}

View 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();
}

View File

@@ -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);
}

View 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();
}

View File

@@ -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);
}

View 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();
}

View File

@@ -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);
}

View 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();
}

View File

@@ -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);
}

View 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();
}

View File

@@ -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);
}

View 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();
}