Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 15:43

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Problem mit JOGL-Texture und TGA
BeitragVerfasst: Do Jun 01, 2006 00:36 
Offline
Guitar Hero
Benutzeravatar

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
Code:
  1. public TTexContainer(String texName,
  2.         File fileName,
  3.         boolean mipmaps)
  4. {
  5.     try
  6.     {
  7.         tex = TextureIO.newTexture(fileName,mipmaps);
  8.         name = texName;
  9.     }
  10.     catch (Exception e)
  11.     {
  12.         System.err.println("Exception while loading texture:" + e.toString() );
  13.         tex = null;
  14.         name = "";
  15.     }
  16.  
  17. }

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 01, 2006 10:20 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo Flash,

ich weiss nur, dass die Texture-Klasse von Sun keine komprimierten TGA-Bilder unterstützt, aber dann hättest du ja eine Exception bekommen müssen.

Ich habe eine kleine Testklasse geschrieben, probier mal ob es damit klappt :

http://www2.informatik.hu-berlin.de/~sanftleb/OpenGL/TestFrame.java

http://www2.informatik.hu-berlin.de/~sanftleb/OpenGL/buntbaum.tga

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 01, 2006 11:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 02, 2006 09:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
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.

BufferUtils
ITextureLoad
TGATextureLoader
Texture
TextureLoader
TextureManager

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 ;)

Evil

_________________
(\__/)
(='.'=)
(")_(")


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 07, 2006 15:07 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 07, 2006 15:23 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
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...

_________________
(\__/)
(='.'=)
(")_(")


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 08, 2006 05:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo Flash,

deine Textur ist eigentlich soweit in Ordnung.
Kannst du vielleicht nochmal den Code für die Anzeige deiner Textur posten?

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 08, 2006 14:06 
Offline
Guitar Hero
Benutzeravatar

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.

Mein Code zum Laden der Textur:

Code:
  1. public TTexContainer(   String texName,
  2.             File fileName,
  3.             boolean mipmaps)
  4. {
  5.     try
  6.     {
  7.         tex = TextureIO.newTexture(fileName,mipmaps);
  8.         name = texName;
  9.     }
  10.     catch (Exception e)
  11.     {
  12.         System.err.println("Exception while loading texture:" + e.toString() );
  13.         tex = null;
  14.         name = "";
  15.     }
  16.    
  17. }


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:

Code:
  1. private void setupOpenGL()
  2.     {
  3.         gl.glColor3f(1,1,1);
  4.        
  5.         gl.glDisable(GL.GL_LIGHTING);
  6.        
  7.         gl.glDisable(GL.GL_DEPTH_TEST);
  8.        
  9.         IntBuffer maxCP = IntBuffer.allocate(1);
  10.         gl.glGetIntegerv(GL.GL_MAX_CLIP_PLANES,maxCP);
  11.         for (short i = 0; i < maxCP.get(0); i++)
  12.             gl.glDisable(GL.GL_CLIP_PLANE0+i);
  13.        
  14.         gl.glShadeModel(GL.GL_FLAT);
  15.        
  16.         gl.glEnable(GL.GL_TEXTURE_2D);
  17.        
  18.         gl.glPolygonMode(GL.GL_FRONT_AND_BACK,GL.GL_FILL);
  19.        
  20.         gl.glEnable(GL.GL_BLEND);
  21.         gl.glBlendFunc(GL.GL_SRC_ALPHA,GL.GL_ONE_MINUS_SRC_ALPHA);
  22.         /*
  23.         gl.glEnable(GL.GL_ALPHA_TEST);
  24.         gl.glAlphaFunc(GL.GL_GEQUAL,0.1f);*/
  25.     }

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 08, 2006 15:03 
Offline
DGL Member
Benutzeravatar

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:
  1. GLCapabilities capabilities = new GLCapabilities();
  2. 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 :roll:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 08, 2006 18:18 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 08, 2006 20:22 
Offline
Guitar Hero
Benutzeravatar

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! :evil:

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 09, 2006 11:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo Flash,

ich glaube ich verstehe was du meinst.

Das liegt am TGA-Loader von JOGL, der das Bild spiegelverkehrt lädt (von oben nach unten).

Ist ganz gut so, denn dann wird das Bild so geladen, wie man es sich auch vorstellt ((0, 0) links unten, (1, 1) rechts oben). :wink:

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 09, 2006 11:24 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich, und Photoshop auch, stellen sich das aber andersrum vor. Da ist (0,0) nämlich links oben.

Nebenbei: Ist das nur bei TGAs so, oder bei allen Texturen?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 09, 2006 11:59 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
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.

_________________
(\__/)
(='.'=)
(")_(")


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 10, 2006 10:20 
Offline
DGL Member
Benutzeravatar

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)

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 15 Queries | GZIP : On ]