Ich lerne OpenGL in C++ mit NeHe-Tutorials, aber ich versuche, sie mit FreeImage-Bibliothek statt Glaux oder SOIL zu tun. Der gute Punkt, den ich bei der Verwendung von FreeImage sehe, ist die letzte Aktualisierung im Oktober letzten Jahres, während SOIL seit 5 Jahren nicht mehr aktualisiert wurde. Das Problem, das ich habe, ist, dass ich Texturen nicht richtig laden kann.Wie lade ich Texturen mit der FreeImage-Bibliothek zu OpenGL?
Hier ist mein Code:
static GLuint texture = 0;
if (texture == 0)
{
FIBITMAP* bitmap = FreeImage_Load(
FreeImage_GetFileType("textures/test/nehe_06.png", 0),
"textures/test/nehe_06.png");
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 3, FreeImage_GetWidth(bitmap), FreeImage_GetHeight(bitmap),
0, GL_RGB, GL_UNSIGNED_BYTE, FreeImage_ConvertTo32Bits(bitmap));
FreeImage_Unload(bitmap);
}
diesen Code verwenden, die Textur ich erhalte, ist falsch: Es ist schwarz, mit farbigen Punkten und Streifen und gibt das Bild zu ändern das gleiche Ergebnis, so nehme ich an I‘ m lädt die Textur nicht korrekt.
Ich habe versucht, die roten und blauen Bits zu tauschen (lesen Sie, dass FreeImage in BGR geladen wird) mit keinem besseren Ergebnis. Schließlich, wenn ich die * FreeImage_ConvertTo32Bits (Bitmap) * um * FreeImage_GetBits (Bitmap) * ändere, bekomme ich einen segfault.
Was mache ich falsch?
Das wird nicht funktionieren für alle Bilder aufgrund Scanline-Ausrichtungsanforderungen. –
@SergeyK. Bei 32-Bit-Pixeln sind alle Scanline-Größen sowieso 4-Byte-ausgerichtet. In welchen Situationen wird es deiner Meinung nach nicht funktionieren? –