Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen mit oglTextur

Aus DGL Wiki
Version vom 30. Dezember 2017, 20:12 Uhr von Mathias (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „200px<br><br> =Texturen - Texturen mit oglTextur = == Einleitung == Hier wird g…“)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Lazarus - OpenGL 3.3 Tutorial - Texturen - Texturen mit oglTextur.png

Texturen - Texturen mit oglTextur

Einleitung

Hier wird gezeigt, wie einfach es ist, mit der Unit oglTextur Texturen zu laden.
Dafür muss die Unit oglTextur bei uses eingebunden werden.

Mit der Klasse TTexturBuffer welche dort enthalten ist, geht dies sehr einfach.
Der grösste Voteil ist, das die meisten gängigen Formate von TBitmap erkannt werden.


Den Textur-Puffer deklarieren.

var
  Textur: TTexturBuffer;

Textur-Puffer erzeugen.

procedure TForm1.CreateScene;
begin
  Textur := TTexturBuffer.Create;

Mit diesr Klasse geht das laden einer Bitmap sehr einfach.
Man kann die Texturen auch von einem TRawImages laden.

procedure TForm1.InitScene;
begin
  Textur.LoadTextures('mauer.bmp');

Das Binden geht auch sehr einfach.
Man kann dieser Funktion noch eine Nummer mitgeben, aber diese wird nur bei Multitexturing gebraucht, dazu später.

procedure TForm1.ogcDrawScene(Sender: TObject);
begin
  glClear(GL_COLOR_BUFFER_BIT);

  Textur.ActiveAndBind; // Textur binden

Am Ende muss man die Klasse noch frei geben.

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Textur.Free;



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