Registriert: Mi Jul 28, 2004 18:30 Beiträge: 25 Wohnort: Chemnitz
Hallo,
ich nutze OpenGl um ein gleines 2D Spiel zu machen (GL_Ortho), zum Texturenladen nehm ich die glBitMap Unit. Das Problem ist nur, dass bei etwas größeren Texturen (304*304, etc.) die Texturengenerierzeit (also in der Procedure GenTexture des GLBitmap2D Objekts der glBitmap Unit), so dass das programm auf meinem 1,7 Ghz, Radeon 9800 3 Sekunden lang lädt (da die Texturen generiert werden).Das Problem ist, dass es auf'ner 800 Mhz CPU schon 9 Sekunden sind (und das bei nur 3 Texturen!). Warum ist das so, und was kann ich dagegen tun? (warum dauert der Aufruf von GenTexture so lange?)
mfg
GSE
_________________ In a world without walls and fences, who needs Windows or Gates?
Registriert: Mi Jul 28, 2004 18:30 Beiträge: 25 Wohnort: Chemnitz
hat ich auch schon ausprobiert, bringt aber leider nicht wirklich was (eigentlich überhaupt nichts)
an irgendwas muss es doch liegen, ich kann doch niemandem solche ladezeiten zumuten
_________________ In a world without walls and fences, who needs Windows or Gates?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Versuche einmal deine Texturen zu generieren, wenn du BuildMipMaps von den Texturobjekten ausgestellt hast. Dann wedren diedirekt übertragen und es wird kein gluBuild2DMipmaps aufgerufen. Wenn das schneller ist, dann bleiben nur die Möglichkeiten von SOS.
Registriert: Mi Jul 28, 2004 18:30 Beiträge: 25 Wohnort: Chemnitz
Zitat:
Versuche einmal deine Texturen zu generieren, wenn du BuildMipMaps von den Texturobjekten ausgestellt hast
dann zeigt er meine texturen gar nicht mehr an (bzw. nur die die keinen AlphaCHannel haben werdne angezeigt).
Zitat:
Dateiformat nutzen in dem die Mipmaps bereits abgelegt sind (DDS).
wär mir ja sympathisch, gibt's da ne möglichkeit die in OGL zu laden (bzw. die überhaupt extern zu erstellen)
und noch'ne verständnisfrage (will j auch wa lernen *g*): Was ist überhaupt eine MipMap und wozu muss die generiert werden? wär nett wenn mir das einer erklären könnte, thx
mfg
GSE
_________________ In a world without walls and fences, who needs Windows or Gates?
Du kannst die von gluBuildMipmaps generierten Texturen wieder zurückholen, auf Festplatte speichern und das nächste Mal direkt von dort laden, oder du machst das Selbe mit gluScaleImage, was dir den Umweg über OpenGL erspart.
Da GLU aber selbst ebenfalls nur einen einfachen Boxfilter implementiert, um Mipmaps zu generieren, bist du mit einer anderen Bildbearbeitungsbibliothek (etwa Bitmap32) genausogut oder sogar besser bedient.
Mipmaps sind (normalerweise) jeweils um den Faktor 2 verkleinerte Versionen der ursprünglichen Textur, die mit speziellen (und teils rechenaufwändigen) Filtern generiert werden, da insbesondere bei kontrastreichen Bildern Artefakte entstehen, wenn man einfach die halben Bildpunkte weglässt.
Für DDS gibt es Plugins im Photoshop, Gimp, das DirectX SDK - und für Delphi habe ich hier eine Importbibliothek für das Format geschrieben (bzw. hauptsächlich portiert) http://www.delphigl.com/forum/viewtopic.php?t=2486&highlight=dds, das SoS inzwischen sogar um eine rudimentäre Importfunktion für 3D-Texturen nachgerüstet hat.
Registriert: Mi Jul 28, 2004 18:30 Beiträge: 25 Wohnort: Chemnitz
Zitat:
Mipmaps sind (normalerweise) jeweils um den Faktor 2 verkleinerte Versionen der ursprünglichen Textur, die mit speziellen (und teils rechenaufwändigen) Filtern generiert werden, da insbesondere bei kontrastreichen Bildern Artefakte entstehen, wenn man einfach die halben Bildpunkte weglässt.
und wozu braucht man die?
Zitat:
Für DDS gibt es Plugins im Photoshop, Gimp,
Wo kann ich das runterladen, hab das bei NVIDIA net gefunden, und sonst nur Plugins für PhotoShop was ich nicht hab (hab noch eins für gimp gefunden konnte aber die dateien nur lesen und außerdem lief's nur mit der linux version von the gimp (denk ich))
schonmal thx
mfg
GSE
_________________ In a world without walls and fences, who needs Windows or Gates?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Die MipMaps werden normalerweise von deiner Grafikkarte automatisch eingesetzt, wenn die Fläche weiter weg ist. Das ist ein recht simpler aber wirkungsvoller Trick um Bandbreite zu sparen.
Ich habe doch erklärt wozu man Mipmaps braucht - um die unschönen Artefakte wegzubekommen, die entstehen, wenn man Bilder ohne Filter verkleinert.
Alternativ könnte man in Mipmaps auch beliebige Bilder (also keine verkleinerten Versionen der Quelle) ablegen, um "Spezialeffekte" zu erzeugen - so wirklich brauchbar wird das aber wahrscheinlich erst mit programmierbaren Shadern, wo man im Fragmentprogramm selbst auswählen kann, auf welche Mipmapstufe man zugreift - so könnte man z.B. in einer Textureinheit sowohl hoch als auch niedrig aufgelöste Bumpmaps ablegen, wie sie manchmal benötigt werden (ich denke hier an parallax Mapping).
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.