Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Directional Light

Aus DGL Wiki
Wechseln zu: Navigation, Suche

Lazarus - OpenGL 3.3 Tutorial - Beleuchtung - Directional Light.png

Beleuchtung - Einfache Beleuchtung mit Clamp

Einleitung

Im ersten Beispiel wurde die Beleuchung mit Acos und Pi berechnet.
Für dies gibt es in GLSL eine fertige Funktion clamp.
Auserdem wird mit clamp berücksichtig, wen der Einstrahlwinkel < 0° ist, das dann kein Liche auf das Objekt kommt.

Der einzige Unterschied zu vorherigem Beispiel ist im Shader-Code.




Hier sieht man, das anstelle von arcos und Pi, clamp verwendet wurde.

Vertex-Shader:

#version 330

layout (location = 0) in vec3 inPos;    // Vertex-Koordinaten
layout (location = 1) in vec3 inNormal; // Normale

out vec4 Color;                         // Farbe, an Fragment-Shader übergeben.

uniform mat4 Matrix;                    // Matrix für die Drehbewegung und Frustum.

vec3 LightPos = vec3(1.0, 0.0, 0.0);

float angeleClamp(vec3 p, vec3 q){
  vec3  r1 = normalize(p);     // Vektoren normalisieren, so das die Länge des Vektors immer 1.0 ist.
  vec3  r2 = normalize(q);
  float d  = dot(r1, r2);      // Skalarprodukt aus beiden Vektoren berechnen.
  return clamp(d, 0.0, 1.0);
}

void main(void)
{
  vec3 Normal = mat3(Matrix) * inNormal;

  float col = angeleClamp(LightPos, Normal);

  gl_Position = Matrix * vec4(inPos, 1.0);
  Color = vec4(col, col, col, 0.0);
}



Fragment-Shader

#version 330

in vec4 Color;      // interpolierte Farbe vom Vertexshader
out vec4 outColor;  // ausgegebene Farbe

void main(void)
{
  outColor = Color; // Die Ausgabe der Farbe
}


Autor: Mathias

Siehe auch