Ich arbeite an einem Spiel, und alle meine Grafiken verwenden Magenta als transparente/magische Farbe. Sie sind alle 32-Bit und das Magenta ist nur für die Bequemlichkeit. Wie auch immer, ich würde mich freuen, wenn mir jemand sagen könnte, welche Bibliothek ich verwenden soll, um meine Bilder zu laden (ich muss sie im GL_RGBA-Format laden, sowohl intern als auch texturspezifisch).Laden von PNG-Texturen zu OpenGL
Antwort
Neben den anderen Antworten zu erwähnen SDL und DevIL, gibt es zwei weitere Optionen zu prüfen:
- Verwendung direkt libpng. Dies wird wahrscheinlich die geringste Auswirkung auf die Code-Größe haben, wenn dies wichtig ist, da Sie keine Aufblähung für andere nicht verwendete Formate, DLLs usw. erhalten.
- Verwenden Sie das Betriebssystem texture loading. Dies kann eine gute Möglichkeit sein, Abhängigkeiten zu reduzieren, wenn Sie die Verwendung von Betriebssystemfunktionen gegenüber externen Bibliotheken bevorzugen. GDI + in Windows XP und höher hat das Laden von Texturen für einige Formate wie PNG und JPEG, und ich weiß es nicht genau, aber andere Betriebssysteme könnten ähnliche Funktionen haben. Es ist ziemlich einfach, GDI + in OpenGL einzubinden, und dann kümmert sich das Betriebssystem um das Laden Ihrer Texturen!
DevIL kann praktisch jedes Dateiformat laden und kann OpenGL-Texturen direkt erstellen. Es ist der einfachste Weg zu gehen.
Sie sollten auch ein Dateiformat verwenden, das einen Alphakanal unterstützt (PNG, TGA, ...). Die Verwendung einer "magischen Farbe" in 32-Bit-Bildern ist wirklich veraltet!
Die gemeinsame Verwendung von DevIL und OpenGL für das Laden von Bildern ist extrem einfach, fast alle magischen Zahlen sind gleich (von Entwurf). Ich habe einen Code (keine Versprechungen, es ist der beste ;-)), dies hier zu tun (loadShaderTexture-Funktion): http://nwshader.svn.sourceforge.net/viewvc/nwshader/nwshader/init.cpp?revision=18&view=markup – ssube
Wenn nur PNG-Unterstützung erforderlich ist, verwenden Sie libpng. DevIL soll einfach sein, aber es ist etwas aufgebläht (tut viel mehr, als nur Bilder zu laden) und intern ruft es tatsächlich OpenGL-Funktionen auf, die sich mit Ihrer eigenen OpenGL-Logik vermischen können.
Ich persönlich bevorzuge SDL_image, da ich SDL sowieso in meinen Projekten verwende. Obwohl nicht sofort offensichtlich, kann SDL_BlitSurface() die Konvertierung von dem, was IMG_Load() zu dem erforderlichen Pixelformat zurückführt, tun.
DevIL kann verwendet werden, um nur Bilder zu laden (keine OpenGL-Aufrufe) oder um Bilder direkt in OpenGL-Texturen zu laden (was notwendigerweise OpenGL-Funktionen aufruft). – Danvil
Es gibt eine sehr minimalistisch eine Datei Beispiel ein png in openGL hier laden:
Eine weitere Option ist OpenCV.
Es tut viel mehr als nur Textur laden, aber die Chancen stehen gut, Sie werden auch die anderen Funktionen nutzen.
Bietet OpenCV Funktionen zum Bereitstellen von Bilddaten in einem Format, das in eine OpenGL-Textur eingefügt werden kann? – thecoshman
- 1. Laden OpenGL> 1.1 Funktionen von Windows
- 2. Laden von .obj in OpenGL in C
- 3. Von Direct3d zu OpenGL
- 4. OpenGL zu OpenGL-ES - glRectf()
- 5. Am einfachsten zu laden mit OpenGL Blender Exportformat
- 6. OpenGL zu OpenGL-ES - glBegin();
- 7. SDL_Surface zu OpenGL Textur
- 8. Laden 3D-Modell in OpenGL-Szene
- 9. C++ OpenGL Bild laden in GL_QUAD, glVertex2f
- 10. Portierung OpenGL ES 2 zu OpenGL
- 11. Laden von Texturen in einem Android OpenGL ES App
- 12. OpenGL Ressource laden im zweiten Thread
- 13. Laden von .obj mesh mit OpenGL ES und XCode
- 14. OpenGL Rendering zu Cubemap
- 15. Synchronisieren von UIView-Layout zu OpenGL-Frames
- 16. FFMPEG zu OpenGL Textur
- 17. Kompatibilität von OpenGL mit OpenGLES2
- 18. Mischen von Audio OpenGL
- 19. Finden von OpenGL-Bildebenenkoordinaten
- 20. Convert OpenGL HQX Shader zu LibGDX
- 21. openGL SubTexturing
- 22. OpenGL C# (OpenTK) Laden und Zeichnen Bild funktioniert nicht
- 23. Finden von normalen OpenGL
- 24. Laden einer TGA/BMP-Datei in C++/OpenGL
- 25. 3ds max Objekt zu Opengl
- 26. So laden und zeigen Sie eine Textur mit Opengl
- 27. OpenGL langsame Verarbeitung beim Laden eines JPEG-Bildes mit SOIL
- 28. Probleme bei der Portierung von OpenGL-Code auf OpenGL ES
- 29. OpenGL-Farbmatrix
- 30. OpenGL zu OpenGL-ES - Ändern der Farbe von Dreiecken in einem Streifen
Beliebiges Codebeispiel für das Laden von GDI +? – Macke
Siehe GLTexture :: LoadFromFile() aus Zeile 510 hier: http://construct2.svn.sourceforge.net/viewvc/construct2/source/common/cr/glenderer/glenderer_windows.cpp?revision=102&view=markup Es könnte sein ein bisschen komplizierter, als Sie brauchen - es verwendet vormultiplizierte Texturen und hat Code, um die Textur auf eine Zweier-Oberfläche mit transparenten Rinnen zu kopieren. – AshleysBrain
Warum sollten Sie sich darum kümmern, Bilder zu laden, wenn Bibliotheken vorhanden sind, die das für Sie tun? – Danvil