Hi,
erstmal vielen Dank für deine Antwort, doch ich habe die Lösung mittlerweise selbst gefunden!
Zuerst habe ich den Fragment Shader folgendermaßen geändert.
#version 430 core
uniform sampler2D texture;
out vec4 color;
void main(void)
{
color = texture(texture, gl\_FragCoord.xy / textureSize(texture, 0));
}
Nun verwende ich folgende Funktionen, um die Textur aus der Bitmap-Datei „tex_11_1.bmp“ zu lesen und sie anzuwenden:
void bmpGetSize(FILE \*bmpStream, long \*width, long \*height)
{
fseek(bmpStream, 18, SEEK\_SET);
fread(width, sizeof(long), 1, bmpStream);
fseek(bmpStream, 22, SEEK\_SET);
fread(height, sizeof(long), 1, bmpStream);
}
void bmpReadTextureFile(FILE \*bmpStream, long bmpSize, GLubyte \*dataPtr)
{
fseek(bmpStream, 54, SEEK\_SET);
fread(dataPtr, 1, bmpSize, bmpStream);
}
void createTexture()
{
FILE \*textureStream = fopen("tex\_11\_1.bmp", "r");
long textureWidth, textureHeight;
GLuint textureBuffer;
GLint textureLoc;
GLint textureCoordLoc;
GLubyte \*textureData;
bmpGetSize(textureStream, &textureWidth, &textureHeight);
textureData = (GLubyte\*)malloc(textureWidth\*textureHeight\*3);
bmpReadTextureFile(textureStream, textureWidth\*textureHeight\*3, textureData);
fclose(textureStream);
glEnable(GL\_TEXTURE\_2D);
glGenTextures(1, &textureBuffer);
glBindTexture(GL\_TEXTURE\_2D, textureBuffer);
glTexImage2D(GL\_TEXTURE\_2D, 0, GL\_RGB, textureWidth-1, textureHeight-1, 0, GL\_BGR, GL\_UNSIGNED\_BYTE, textureData);
glTexParameterf(GL\_TEXTURE\_2D, GL\_TEXTURE\_WRAP\_S, GL\_REPEAT);
glTexParameterf(GL\_TEXTURE\_2D, GL\_TEXTURE\_WRAP\_T, GL\_REPEAT);
glTexParameterf(GL\_TEXTURE\_2D, GL\_TEXTURE\_MAG\_FILTER, GL\_NEAREST);
glTexParameterf(GL\_TEXTURE\_2D, GL\_TEXTURE\_MIN\_FILTER, GL\_NEAREST);
textureCoordLoc = glGetAttribLocation(renderingProgram, "texCoord");
glEnableVertexAttribArray(textureCoordLoc);
glVertexAttribPointer(textureCoordLoc, 2, GL\_FLOAT, GL\_FALSE, 0, NULL);
textureLoc = glGetUniformLocation(renderingProgram, "texture");
glActiveTexture(GL\_TEXTURE0);
glUniform1i(textureLoc, 0);
}
void init()
{
renderingProgram = compileShaders();
glUseProgram(renderingProgram);
createTexture();
glGenVertexArrays(1, &vertexArrayObject);
glBindVertexArray(vertexArrayObject);
}
Jetzt wird die Textur einfach so oft auf das Objekt gelegt, bis es augefüllt ist. In der Funktion „glTexImage2D()“ habe ich übrigens die Breite und die Höhe jeweils um 1 verringert, da sonst um die Texturen schwarze Rahmen erscheinen.
Gruß,
nano99