Registriert: Sa Jul 22, 2006 00:43 Beiträge: 30 Wohnort: Borland
Hi Community,
ich bin gerade dabei ein OpenGL Projekt auf Java zu portieren und es treten doch einige Probleme auf. Hier möchte ich aber nur auf das oben beschriebene Problem eingehen. In Delphi habe ich folgende Befehlsfolge benutzt um die Transparenz meiner TGA Textur zu nutzen:
Code:
//Alphatest zur Erkennung der Transparenz anhand der Textur
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.1);
//Blending zur Behebung der weißen Ränder wegen des Alphatests
Ich benutze hierfür die Textur die Java Klasse "com.sun.opengl.util.texture.Texture".
In meiner Java Anwendung wird meine Textur nun nicht korrekt angezeigt, sprich der transparente Teil ist komplett weiß. Laut API sollten die Aufrufe folgendermaßen aussehen:
Code:
//Alphatest zur Erkennung der Transparenz anhand der Textur
gl.glEnable(GL.GL_ALPHA_TEST);
gl.glAlphaFunc(GL.GL_GREATER, 0.1f);
//Blending zur Behebung der weißen Ränder wegen dem Alphatest
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wo hast den denn deinen Java Code her? OpenGL ist Sprachunabhängig. Die Befehle müssen also das gleiche machen, wenn du sie in der gleichen Reihenfolge in beiden Sprachen verwendest. Zum Laden von Transparenten Texturen musst du mal im Netz suchen. Ich hab gerade keinen Code zur Hand. Empfehlen würde ich dir statt TGA PNGs. Die sind deutlich kleiner als TGAs und soweit ich weiß auch kein Proprietäres Format (oder?).
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Sa Jul 22, 2006 00:43 Beiträge: 30 Wohnort: Borland
Welchen Code meinst du speziell? Den zum Laden der Textur? Bin mir nicht mehr sicher, aber ich denke das war irgendein Tutorial, das ich zufällig im Netz gefunden habe. Den Link habe ich leider nicht mehr.
Code:
private Texture loadTexture(String fnm){
String fileName = fnm;
Texture tex = null;
try {
tex = TextureIO.newTexture( new File(fileName), false);
TGA wurde damals im 2d Tutorial empfohlen und seitdem habe ich es benutzt. Ich werde mich dann aber mal nach einen PNG Loader umsehen. Ich habe aber irgendwie das Gefühl, dass die Klasse evtl noch irgendeinen Parameter braucht.
Hattest du beim laden der TGA sichergestellt das du RGB_A bzw. GBR_A bei TGA mit Alphakanal verwendet hast? Sonst hier noch nen TGA Loader der mittels LWJGL realisiert ist. Sollte sich sehr leicht nach JOGL portieren lassen. http://lwjgl.org/wiki/doku.php/lwjgl/tu ... xtures/tga
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
ich glaube wir sollten mal die Formatempfehlung im 2D Tutorial aktualisieren. Laut Wikipedia können TGA Dateien nur von wenigen Programmen erstellt werden. (Z.B. Gimp und Photoshop) Entweder Wikipedia liegt hier falsch (was möglich ist) oder Sascha.
Dann schreibt Sascha, dass es keine guten Loader gibt die ohne DLLs und zusatzlibs auskommen. Ist das auch heute noch so? Lossy bietet bei der glBitmap ja auch nur eine Brücke zu PNG Loadern an. Ich persönlich finde PNGs äußerst praktisch, da sie wirklich fast überall erstellt werden können.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Ja, die TGA Unterstützung ist außerhalb von Spielen u. Wissenschaft? sehr mager. Da stimmt der Wikipedia Artikel schon.
PNG ist zwar kleiner, aber bei Java muss man diese erst mMn umständlich konvertieren und kann sie nicht direkt laden wie TGA und DDS. Wobei letzteres in den meisten Fällen die nahezu beste Wahl ist.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also...ich bin mir da gerade nicht sicher. Ich hab meinen Code leider nicht zur Hand sonst könnte ich mal nachgucken. Aber dass es keine offene PNG Lade Lib gibt, zeigt doch nur, dass mal jemand eine schreiben könnte.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Gibt es doch? Zb. Slick für LWJGL. Aber wie gesagt ist es umständlich. Erst mittels ImageIO das PNG laden, dann den Inhalt entsprechend auslesen und verarbeiten und dann an den Buffer senden. Mag sein, dass es bereits ohne ImageIO läuft, aber die Daten erst aus einem BufferedImage herauszulesen ist grotesk.
Mitglieder in diesem Forum: 0 Mitglieder und 8 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.