Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
So, ich hab wieder ein JOGL Problem. Und zwar mit der Klasse com.sun.opengl.util.texture.Texture .
Sie scheint probleme zu haben meine TGA Textur zu laden. Anscheinend wir der Alphakanal nicht richtig geladen, und wird fälschlicherweise auf 0.0 gesetzt.
Das konnte ich dadurch rausfinden, dass ich beim Alphatest ein paar Werte ausprobiert habe. Nur 0.0 (bei "GL_GEQUAL") hat funktioniert. Das sagt mir, dass der Alphakanl nicht korrekt geladen wurde.
Ich brauch einen Texturloader der bmp, jpgs, tga und eventuell noch pngs zuverlässig laden kann. Ich dachte die Klasse wäre passend. Aber ohne vernünftige Ladefunktion für TGAs wirds eng.
Oder mach ich was falsch? Ich erstell die Textur mit
Ich hab daheim einen TGA Loader für LWJGL. Der sollte mit ein wenig Anpassung auch mit JOGL funktionieren.
Werd den hochladen sobald ich von der Arbeit zu Hause bin. Der liest auch der Alpha Kanal und RLE komprimierte TGAs.
So, nun hat es ein bisschen länger gedauert und der angehänge Code ist hier und da ein wenig verzwackt, sollte dir aber keine großen Probleme bereiten. Das wirklich wichtige, das laden der TGA Datei ist in einer Class realisiert und nutzt lediglich ein paar Dateilese Funktionen seiner Mutter Class.
Die für dich wichtigste Klasse ist mit Sicherheit die TGATextureLoader. Alle anderen Klassen sind nebenläufige Klassen auf die zugegriffen wird um die Funktionalität zu gewährleisten. Bei Fragen einfach fragen
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nachdem ich meine ThI Prüfung nun hinter mir habe sitz ich wieder an dem Problem.
Ich hab dj3hut1s Beispiel ausprobiert und es ging. Dann hab ich seine Textur genommen, und in meinem Projekt ausprobiert. Und siehe da, alles wurde korrekt angezeigt.
Nun frage ich mich aber ernsthaft, wass das Problem sein soll. Ich hab meine Textur mit 32 Bit pro Pixel gespeichert. Eigentlich sollte da der Alphakanal mit dabei sein. Und Photoshop lädt die Datei ja auch korrekt.
Ich versteh einfach nicht was das Problem sein soll.
Ich häng die Textur mal an. Eventuell fällt euch was auf.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Hast du vor dem Speichern auch den Alpha Kanal aktiviert? Ansonsten kannst du die Texture so oft du willst als 32Bit abspeichern, es wird kein Alpha drin sein. Der Alpha Kanal muss explizit in der Kanal Auswahl aktiv sein damit er mitgespeichert wird. JEdenfalls bei Photoshop...
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@Evil-Devil: Wie soll das gehn? Wenn ich TGAs speichere hab ich keine andere Auswahlmöglichkeit als die Bits per Pixel. Und da steht 32Bit meiner Meinung nach für "mit Alpha".
@dj3hut1:
Hab mir das gerade nochmal genauer angeguckt. Dein Beispiel funktionierte so wie es sollte. Deine Textur wird (im Gegensatz zu meiner) im Programm ersteinmal angezeigt ABER ohne Transparenz. Der Alphakanal scheint also nicht geladen zu werden.
System.err.println("Exception while loading texture:"+ e.toString());
tex =null;
name ="";
}
}
fileName ist der absolute Name der Datei mitsamt Pfad. Der einzige unterschied ist, dass ich keine Mipmaps generiere. Also der Parameter ist eigentlich immer false, aber auch true ändert nichts (wie zu erwarten war).
Und beim rendern werden folgende Einstellungen gemacht:
Der Alphatest funktioniert bei deiner Textur. Wenn ich ihn aber auf meine Anwende fliegt die ganze Textur raus.
Irgendwas scheint also mit der Textur nicht zu stimmen, bzw mit dem Alphakanal. Denn beide Texturen enthalten eigentlich Transparenz. Diese wird aber niemals dargestellt.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Di Dez 27, 2005 12:44 Beiträge: 393 Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo Flash,
und was passiert, wenn du meine Testklasse mit deiner Textur probierst?
Falls die Testklasse nicht funktioniert, kann es sein, dass du beim Erzeugen deines Fensters defaultmässig keinen Alpha-Buffer bekommst.
Du kannst dann ja mal folgendes bei deiner Initialisierung versuchen :
Code:
GLCapabilities capabilities = new GLCapabilities();
capabilities.setAlphaBits(8)
Merkwürdigerweise verursacht das bei mir (hab eine alte Matrox-Karte), dass meine 3D-Beschleunigung ausgeschaltet wird (capabilities.getAlphaBits() liefert bei mir 0 )
Andernfalls würd ich gerne nochmal deine display-Funktion sehen.
Viele Grüße
dj3hut1
P.S. probier gegebenfalls mipmaps zu aktivieren. Ich bekomme bei mipmaps=false aufeinmal garkeine Textur mehr angezeigt, hoffentlich ist das kein jogl-bug
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das war ne gute Idee...hätte ich schon längst mal testen sollen.
Also folgender Kenntnisstand:
1. Meine Textur ist OK. Sie wird bei deinem Beispiel korrekt mit Transparenz dargestellt.
2. Ich glaube, dass es mit den MipMaps nichts zu tun hatte.
Ich habe den verdacht an irgend einer Stelle im Code etwas zu ändern ohne das ich es merke. Der Code wurde von C++ auf Java portiert. Kann sein, dass ich etwas anders gelöst habe, und dadurch irgendein GL State nicht zurückgesetzt wird.
Ich werd nochmal suchen...
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich könnte aus der Haut fahren!!!
Es gab nie ein Problem in meinem Code. Alles war Korrekt, doch anscheinend verhält sich JOGL nicht Standardkonform!
Ich habe mir noch einmal deinen Code angesehen der offensichtlich funktioniert. Du übergibst die Texturcoordinaten in der "falschen" Reihenfolge.
Anscheinend ist (0,0) bei JOGL links unten. Bei den anderen Bindings (Delphi, C++) ist aber (0,0) links oben. Deshalb hatte ich auch Probleme mit meinen Texturefonts.
Kann das bitte nocheinmal jemand anderes bestätigen. Ich meine das mit den Texturkoordinaten.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Das ist meines Wissens nach keine "Falsche" Implementation. Denn als OGL damals entwickelt waren die Koordinaten auch schon unten Links und das hat sich bis heute nicht geändert. Ich denke eher das die Libraries für Windows etc so angepasst sind das sie die Koordinaten auf oben Links setzen.
Bei LWJGL muss ich auch erst das Bild flippen da der Ursprung dort unten Links ist.
Registriert: Di Dez 27, 2005 12:44 Beiträge: 393 Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Na gut, das hängt dann wahrscheinlich auch davon ab, ob man in Bildschirmkoordinaten (bzw. Photoshop- oder GIMP-Koordinaten) oder in OpenGL-Koordinaten denkt
Betrifft dann aber glaube ich alle Texturen (habe bisher aber nur png und jpg ausprobiert)
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.