Lazarus - OpenGL 3.3 Tutorial - Texturen - Alpha-Textur: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
 
Zeile 4: Zeile 4:
 
Texturen werden erst richtig interessant, wen noch der Alpha-Kanal verwendet wird.<br>
 
Texturen werden erst richtig interessant, wen noch der Alpha-Kanal verwendet wird.<br>
 
Wie hier im Beispiel ein Baum.<br>
 
Wie hier im Beispiel ein Baum.<br>
 +
'''Hinweis:''' Das Z-Bufferproblem, wie bei einfachen Alphablending muss bei Alphatexturen auch beachtet werden. Siehe [[Lazarus_-_OpenGL_3.3_Tutorial#Alpha_Blending|Alphablending]].<br>
 
<br><br>
 
<br><br>
Wichtig ist, das man OpenGL mit teilt, das man Alpha-Blending will.<br>
+
Wichtig ist, das man OpenGL mitteilt, das man Alpha-Blending will.<br>
 
<syntaxhighlight lang="pascal">procedure TForm1.InitScene;
 
<syntaxhighlight lang="pascal">procedure TForm1.InitScene;
 
begin
 
begin

Aktuelle Version vom 2. Januar 2018, 18:57 Uhr

Lazarus - OpenGL 3.3 Tutorial - Texturen - Alpha-Textur.png

Texturen - Alpha-Textur

Einleitung

Texturen werden erst richtig interessant, wen noch der Alpha-Kanal verwendet wird.
Wie hier im Beispiel ein Baum.
Hinweis: Das Z-Bufferproblem, wie bei einfachen Alphablending muss bei Alphatexturen auch beachtet werden. Siehe Alphablending.


Wichtig ist, das man OpenGL mitteilt, das man Alpha-Blending will.

procedure TForm1.InitScene;
begin
  Textur.LoadTextures('baum.png');
  glEnable(GL_BLEND);                                  // Alphablending an
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);   // Sortierung der Primitiven von hinten nach vorne.



Die Shader sehen gleich aus, wie bei einer einfachen Textur.

Vertex-Shader:

#version 330

layout (location = 0) in vec3 inPos;    // Vertex-Koordinaten
layout (location = 10) in vec2 inUV;    // Textur-Koordinaten

uniform mat4 mat;

out vec2 UV0;

void main(void)
{
  gl_Position = mat * vec4(inPos, 1.0);
  UV0 = inUV;                           // Textur-Koordinaten weiterleiten.
}



Fragment-Shader:

#version 330

in vec2 UV0;

uniform sampler2D Sampler;              // Der Sampler welchem 0 zugeordnet wird.

out vec4 FragColor;

void main()
{
  FragColor = texture( Sampler, UV0 );  // Die Farbe aus der Textur anhand der Koordinten auslesen.
}


Autor: Mathias

Siehe auch