* Chunks are now rendered as solid, lit meshes instead of wireframe. * The GLSL shaders have been updated to a directional lighting model. * Chunkmes now calculates normal vectors for each vertex to enable the lighting. * Shader class now has a 'set_vec3' method for sending lighting date to the GPU. Bug Fix: * Resolves visual artifacts and "seams" at chunk boundaries. Next up: * To calculate the correct angle for a vertex at the edge of chunk A, we need to know the height of the terrain in the neighboiring Chunk B. Since it doesn't have that information, the GPU's making an appoximate guess. We need to generate and send a small "border" of height data along with each chunk, I'll do this by increasing the size of the heightmap array in the network message so it can hold the 32x32 chunk plus 1 vertex border all around. MAking it 34x34 for each chunk.
24 lines
624 B
GLSL
24 lines
624 B
GLSL
#version 330 core
|
|
out vec4 FragColor;
|
|
|
|
in vec3 FragPos;
|
|
in vec3 Normal;
|
|
|
|
uniform vec3 objectColor;
|
|
uniform vec3 lightColor;
|
|
uniform vec3 lightDir; /* Normalised direction vector for the light source. */
|
|
|
|
void main() {
|
|
/* Ambient lighting (cheap, constant base light) */
|
|
float ambientStrength = 0.3;
|
|
vec3 ambient = ambientStrength * lightColor;
|
|
|
|
/* Diffuse lighting (depends on angle of the surface) */
|
|
vec3 norm = normalize(Normal);
|
|
float diff = max(dot(norm, normalize(-lightDir)), 0.0);
|
|
vec3 diffuse = diff * lightColor;
|
|
|
|
vec3 result = (ambient + diffuse) * objectColor;
|
|
FragColor = vec4(result, 1.0);
|
|
}
|