Wie lade ich die Texturen OpenGL mit FreeImage-Bibliothek?
Lerne ich OpenGL in C++ unter Verwendung von NeHe-tutorials, aber ich versuche, Sie zu tun, mit der FreeImage-Bibliothek, statt Glaux oder BODEN. Die guten Punkt sehe ich in der Verwendung FreeImage ist thar es Letzte update war im Oktober letzten Jahres, während der BODEN wurde nicht aktualisiert, in 5 Jahren. Das problem was ich habe ist, dass ich nicht in der Lage, laden von Texturen korrekt.
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, wird die textur die ich bekomme, ist falsch: es ist schwarz, mit farbigen Punkten und Streifen, und ändern das Bild gibt das gleiche Ergebnis, ich vermute, ich bin nicht das laden der textur korrekt.
Ich habe versucht zu tauschen der roten und blauen bits (read, die FreeImage-Lasten BGR) mit keinem besseren Ergebnis. Schließlich, wenn ich die *FreeImage_ConvertTo32Bits(bitmap)* von *FreeImage_GetBits(bitmap)* bekomme ich einen segfault.
Was ich falsch mache?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Probleme mit dem code - ist, dass Sie konvertieren, um Bild in 32 bit, aber Sie geben eine 24-bit-textur-format zu openGL (
GL_RGB
). Das zweite ist, dass Sie auf der Durchreise sind die FreeImage-Objekt selbst, um die textur anstatt der bits umgewandelt.Müssen Sie etwas tun, wie, anstatt
Zu erweitern, die Vorherige Antwort:
FreeImage_GetBits()
Funktion zurückgegeben wird ein Zeiger auf die Daten gespeichert in einer FreeImage-internal-format. Wo jede Scanzeile ist in der Regel ausgerichtet, um eine 4-Byte-Grenze. Das wird funktionieren, während Sie power-of-two-Texturen. Jedoch, für NPOT Texturen, die Sie angeben müssen, wird das korrekte packen Ausrichtung für OpenGL.Gibt es eine andere Funktion in FreeImage die Ihnen erlauben, get unaligned dicht gepackten array von Pixeln:
FreeImage_ConvertToRawBits()