Witam. Próbuję napisać shader ze światłem rozproszonym. Mam poprawnie wygenerowane normalne. Ta żółta Kula powinna generować światło. Nie wiem w jaki sposób obliczyć Diffuse Light. Pomoże ktoś?
Vertex Shader
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoord;
layout (location = 2) in vec3 aNormal;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
out vec2 TexCoord;
out vec3 Normal;
out vec3 FragPosition;
void main()
{
TexCoord = aTexCoord;
FragPosition = vec3(view * model * vec4(aPos, 1.0)); // Transformacja pozycji wierzchołka do przestrzeni świata
Normal = mat3(transpose(inverse(model))) * aNormal; // Transformacja normalnych do przestrzeni świata
gl_Position = projection * view * model * vec4(aPos, 1.0);
}
Fragment Shader
#version 330 core
in vec2 TexCoord;
in vec3 Normal;
in vec3 FragPosition;
uniform sampler2D texture1;
uniform vec3 LightPosition;
out vec4 FragColor;
void main()
{
// Diffuse Light - światło rozproszone
// Ambient - światło bazowe
vec3 norm = Normal;
vec3 lightDir = normalize(LightPosition - FragPosition);
float diffuse = dot(norm, lightDir);
float ambient = 0.2f;
vec3 textureColor = texture(texture1, TexCoord).rgb;
// Finalny kolor
vec3 lighting = (diffuse + ambient) * textureColor;
FragColor = vec4(lighting, 1.0);
}
- screenshot-20250309164157.png (354 KB) - ściągnięć: 1