Lazarus - OpenGL 3.3 Tutorial - Texturen - Alpha-Textur: Unterschied zwischen den Versionen
Aus DGL Wiki
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 | + | 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
Inhaltsverzeichnis
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
- Übersichtseite Lazarus - OpenGL 3.3 Tutorial