90 - Versuche
08 - MipMap
procedure TForm1.CreateScene;
begin
Shader := TShader.Create([FileToStr('Vertexshader.glsl'), FileToStr('Fragmentshader.glsl')]);
with Shader do begin
UseProgram;
Matrix_ID := UniformLocation('mat');
glUniform1i(UniformLocation('Sampler'), 0);
end;
Matrix := TMatrix.Create;
FrustumMatrix := TMatrix.Create;
FrustumMatrix.Perspective(45, 1.0, 2.5, 1000.0); // Alternativ
WorldMatrix := TMatrix.Create;
WorldMatrix.Translate(0, 0, -200.0); // Die Scene in den sichtbaren Bereich verschieben.
WorldMatrix.Scale(5.0); // Und der Grösse anpassen.
WorldMatrix.RotateA(1.5); // Drehe um Y-Achse
WorldMatrix.RotateC(pi); // Drehe um Y-Achse
Texturen laden
procedure TForm1.InitScene;
begin
// ------------ Texture laden --------------
Textur[0] := TTexturBuffer.Create;
with Textur[0] do begin
IsMipMap := False;
TexParameter.Add(GL_TEXTURE_MIN_FILTER, GL_NEAREST);
LoadTextures('mauer.xpm');
end;
Textur[1] := TTexturBuffer.Create;
with Textur[1] do begin
TexParameter.Add( GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
LoadTextures('mauer.xpm');
end;
glClearColor(0.6, 0.6, 0.4, 1.0); // Hintergrundfarbe
// Daten für Dreieck
glBindVertexArray(VBTriangle.VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBTriangle.VBOVertex);
glBufferData(GL_ARRAY_BUFFER, sizeof(Quad), @Quad, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, False, 0, nil);
glBindBuffer(GL_ARRAY_BUFFER, VBTriangle.VBOTex);
glBufferData(GL_ARRAY_BUFFER, sizeof(TextureVertex), @TextureVertex, GL_STATIC_DRAW);
glEnableVertexAttribArray(10);
glVertexAttribPointer(10, 2, GL_FLOAT, False, 0, nil);
end;
procedure TForm1.ogcDrawScene(Sender: TObject);
var
x, y: integer;
const
d = 2.0;
s = 8;
begin
Matrix := TMatrix.Create;
glClear(GL_COLOR_BUFFER_BIT);
Textur[0].ActiveAndBind();
Vertex-Shader:
Hier ist die Uniform-Variable mat hinzugekommen.
Diese wird im Vertex-Shader deklariert, Bewegungen kommen immer in diesen 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;
}
Fragment-Shader:
#version 330
in vec2 UV0;
uniform sampler2D Sampler;
out vec4 FragColor;
void main()
{
FragColor = texture( Sampler, UV0, -5 );
// FragColor=vec4(1.0);
}