Blinn-Phong lighting

vertex-deduplication
EmaMaker 2023-03-26 22:21:36 +02:00 committed by emamaker
parent 6bd3bdecb8
commit 44b027c3e2
5 changed files with 40 additions and 22 deletions

View File

@ -1,12 +1,42 @@
#version 330 core #version 330 core
in vec4 vColor; in vec3 vColor;
in vec3 vNormal; in vec3 vNormal;
in vec3 FragPos;
out vec4 FragColor; out vec4 FragColor;
vec3 lightColor = vec3(1.0);
vec3 lightDir = -normalize(vec3(0.0, 100.0, 0.0) - vec3(32.0));
float ambientStrength = 0.5;
float diffuseStrength = 0.3;
float specularStrength = 0.2;
uniform vec3 viewPos;
uniform float u_time;
void main() void main()
{ {
FragColor = vColor; // offset the normal a tiny bit, so that the color of faces opposing lightDir is not completely
// FragColor= vec4(1.0f, 1.0f, 1.0f, 1.0f); // flat
vec3 normal = normalize(vNormal);
// Blinn-Phong lighting
// Ambient
vec3 ambient = lightColor*vColor;
// Diffuse
float diff = max(dot(normal, lightDir), 0.0);
vec3 diffuse = vColor * diff;
// Blinn Specular
vec3 viewDir = normalize(viewPos - FragPos);
vec3 halfwayDir = normalize(lightDir + viewDir);
float spec = pow(max(dot(normal, halfwayDir), 0.0), 64.0);
vec3 specular = lightColor * vColor * spec;
// Final color
vec3 color = ambient * ambientStrength + diffuse * diffuseStrength + specular * specularStrength;
FragColor = vec4(color, 1.0);
} }

View File

@ -8,13 +8,15 @@ uniform mat4 model;
uniform mat4 view; uniform mat4 view;
uniform mat4 projection; uniform mat4 projection;
out vec4 vColor; out vec3 vColor;
out vec3 vNormal; out vec3 vNormal;
out vec3 FragPos;
void main() void main()
{ {
vColor = vec4(aColor, 1.0f); vColor = aColor;
vNormal = aNormal; vNormal = mat3(transpose(inverse(model))) * aNormal;
FragPos = vec3(model*vec4(aPos, 1.0));
gl_Position = projection * view * model * vec4(aPos, 1.0); gl_Position = projection * view * model * vec4(aPos, 1.0);
} }

View File

@ -124,7 +124,6 @@ namespace chunkmanager
chunks_indices[index][0] = x; chunks_indices[index][0] = x;
chunks_indices[index][1] = y; chunks_indices[index][1] = y;
chunks_indices[index][2] = z; chunks_indices[index][2] = z;
std::cout << index << "/" << chunks_volume << "\n";
index++; index++;
} }
} }

View File

@ -323,21 +323,6 @@ void quad(Chunk::Chunk* chunk, glm::vec3 bottomLeft, glm::vec3 topLeft, glm::vec
break; break;
} }
// Fake shadows
if ((bottomLeft.z == bottomRight.z && bottomRight.z == topLeft.z && topLeft.z == topRight.z))
{
r += 0.1f;
g += 0.1f;
b += 0.1f;
}
if ((bottomLeft.y == bottomRight.y && bottomRight.y == topLeft.y && topLeft.y == topRight.y))
{
r += 0.12f;
g += 0.12f;
b += 0.12f;
}
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
chunk->colors.push_back(r); chunk->colors.push_back(r);

View File

@ -88,6 +88,8 @@ int main()
// Camera // Camera
theCamera.update(window, deltaTime); theCamera.update(window, deltaTime);
theShader->setFloat("u_time", currentFrame);
theShader->setVec3("viewPos", theCamera.getPos());
// Reset blockping timeout if 200ms have passed // Reset blockping timeout if 200ms have passed
if(glfwGetTime() - lastBlockPick > 0.1) blockpick = false; if(glfwGetTime() - lastBlockPick > 0.1) blockpick = false;