Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[OpenGL GLSL] Diffuse Light - Światło Rozproszone

Ostatnio zmodyfikowano 2025-03-10 14:34
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
[OpenGL GLSL] Diffuse Light - Światło Rozproszone
» 2025-03-09 15:52:38
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);
}
P-182153
tBane
Temat założony przez niniejszego użytkownika
» 2025-03-10 14:34:57
Dobra mam. Wrzucam kod może ktoś będzie miał porobny problem :-)



const char* vertex_shader_with_light_source = R"(
    #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(model * vec4(aPos, 1.0)); // Transformacja pozycji wierzchołka do przestrzeni świata
        //Normal = mat3(transpose(inverse(model))) * aNormal; // Transformacja normalnych do przestrzeni świata
        Normal = aNormal;
        gl_Position = projection * view * model * vec4(aPos, 1.0);
    }
)";


const char* fragment_shader_with_light_source = R"(
    #version 330 core

    in vec2 TexCoord;
    in vec3 Normal;
    in vec3 FragPosition;

    uniform sampler2D texture1;

    uniform vec3 LightPosition;
    uniform vec3 CamPosition;
    uniform float LightPower;
    uniform float LightRange;

    out vec4 FragColor;

    void main()
    {
        // Diffuse Light - światło rozproszone
        // Specular Light - światło odbite
        // Ambient - światło bazowe

        vec3 norm = normalize(Normal);
        vec3 lightDir = normalize(LightPosition - FragPosition);
       
        float diffuse = max(dot(norm, lightDir)*LightRange, 0.0f);
        float ambient = 0.0f;

        vec3 textureColor = texture(texture1, TexCoord).rgb;

        // Finalny kolor
        vec3 result = (diffuse*LightPower + ambient) * textureColor;
        FragColor = vec4(result, 1.0);
    }
)";
P-182154
« 1 »
  Strona 1 z 1