[OpenGL GLSL] Diffuse Light - Światło Rozproszone
Ostatnio zmodyfikowano 2025-03-10 14:34
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); }
|
|
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); } )";
|
|
« 1 » |