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

Aktuelle Zeit: Fr Jul 18, 2025 08:51

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



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Apr 26, 2006 21:25 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Hi,

wie allseits bekannt ist (oder auch nicht) ist nach dem Texturladen das vertikale Spiegeln der geladenen Textur erforderlich, bevor man sie an OpenGL übergeben kann. Ich frage mich aktuell, warum? Liest SDL die Daten falschrum ein oder liest OpenGL die Daten falschrum ein? Wer ist der schuldige? Kann mir diese Frage jemand beantworten? Was ist mit BMPs? Die werden ja grundsätzlich auf dem Kopf gespeichert.

Gruß,
Frase

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 26, 2006 21:30 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
War da nicht mal was mit MS die einfach innerhalb Windows die Daten andersrum benutzt haben, oder täusch ich mich da jetzt? Wär ja nicht das erste mal ...

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 26, 2006 21:33 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
hö? Ich glaub, da täuscht du dich jetzt. Windows hat damit mal ausnahmsweise nichts mit zu tun, denk ich ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 26, 2006 22:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Ich geh einfach mal davon aus, dass SDL den Punkt 0,0 oben links hat und OpenGL unten links ...

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 26, 2006 22:25 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Glaub ich auch... Würde auch zu dem Code da passen, den ich in der SDL-Doku gefunden hab. Dort wird n Bild geladen und gemalt. Ohne gespiegelt zu werden...
Code:
  1. int DrawImage( SDL_Surface *surface, char *image_path, int x_pos, int y_pos )
  2. {
  3.    SDL_Surface *image = IMG_Load ( image_path );
  4.    if ( !image )
  5.    {
  6.       printf ( "IMG_Load: %s\n", IMG_GetError () );
  7.       return 1;
  8.    }
  9.  
  10.    // Draws the image on the screen:
  11.    SDL_Rect rcDest = { x_pos, y_pos, 0, 0 };
  12.    SDL_BlitSurface ( image, NULL, surface, &rcDest );
  13.    SDL_FreeSurface ( image );
  14.    return 0;
  15. }

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 27, 2006 09:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ich weiß zwar nicht wie das in SDL funktioniert und was genau da so abgeht. Aber in einem BMP und einem (meist üblichen) TGA liegt die unterste Zeile am Anfang der Datei.

Leider ist es so, dass die meisten Loader diese Bilder am Stück einlesen und somit liegt die Textur im Speicher auf dem Kopf. Im Windows tut ein BMP das in der Regel allerdings auch. Da die Texturkoordinaten allerdings sehr Flexibel sind hat es sich durchgesetzt, dass es heißt der Ursprung sei unten Links. OpenGL ist es sehr egal wie die Textur im Speicher liegen und wie die Koordinaten aussehen.

Zu mindest in den meisten Fällen. Bei Cubemaps sieht man es regelmäßig immer wieder, dass einige Programme die Texturen gespiegelt auf der Festplatte abgespeichert haben. Somit werden diese aber im Endeffekt richtig herum geladen. Doppelt gespiegelt. Das ist in diesen Fällen nötig, da die Koordinaten von Cubemaps automatisch berechnet werden. Was mich in meiner Überzeugung festigt, dass die Texturen eigentlich auf dem Kopf stehen sollten.

Oder aber man würde die Texturen richtig herum einlesen so, dass diese mit der obersten Zeile als erstes im Speicher liegen. Dann ist der Ursprung auch Links oben. In der glBitmap mache ich es so, dass die Texturen IMMER richtig im Speicher liegen. Was an einigen Stellen die Adressierung ungemeint vereinfacht. Leider ist die Tragweite des "Problem" größer als man denken mag. Denn die gängigen 3D Programm scheinen die Koordinaten auch so abzuspeichern. Bzw die Glut generiert auch Texturkoordinaten die auf dem Kopf stehen.

Aber nur weil es alle so machen heißt es nicht, dass es richtiger ist. Es hat sich leider nun mal nur eingebürgert. Ähnlich sieht es bei glOrtho aus. Für OpenGL ist es egal aber alleine anhand der Parameterbezeichnung wird dort auch ein windowsähnliches Koordinatensystem bevorzugt. In 3D ist es wieder anders. Aber es hat ja niemand behauptet, dass 2D und 3D gleich sein müssen.

Entweder sieht SDL das genau so wie ich oder es kann auch einfach nur sein, dass sie eher die Kompatibilität zu Windows suchen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 27, 2006 16:09 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
SDL an sich macht das eigentlich recht gut. Da werden TGAs z.B. richtig herumgeladen. Bei deiner glBitmap hatte ich immer das Problem, das manche Texturen (TGAs) richtig rum waren, andere jedoch gespiegelt werden mussten. Ich nehme an, irgendwo in der TGA ist ein Bit, was das festlegt. Anders kann ich mir nicht erklären, dass es bei SDL und irgendwelchen Grafikprogrammen funktioniert ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 27, 2006 16:13 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Zitat:
Ich nehme an, irgendwo in der TGA ist ein Bit, was das festlegt. Anders kann ich mir nicht erklären, dass es bei SDL und irgendwelchen Grafikprogrammen funktioniert Wink
Es gibt solchen bit eben nicht. Es kommt darauf an wie man die Datei liest.

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 27, 2006 16:14 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
sniper hat geschrieben:
Zitat:
Ich nehme an, irgendwo in der TGA ist ein Bit, was das festlegt. Anders kann ich mir nicht erklären, dass es bei SDL und irgendwelchen Grafikprogrammen funktioniert Wink
Es gibt solchen bit eben nicht. Es kommt darauf an wie man die Datei liest.

Aber wieso stellen dann ausnahmslos alle Grafikprogramme, die ich hab, bzw alle Programme, die TGAs laden können (Photoshop, Gimp, 3ds max, IrfanView...) meine ganzen TGAs und auch fremde TGAs richtig herum dar? Die können das doch auch nicht blind erraten. Und SDL packt es ja auch.

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 27, 2006 16:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ja in TGAs gibt es ein Bit und eigentlich werte ich das auch aus. :shock: Wenn du mal wieder so ein Bild hast (wobei du wahrscheinlich eh nur noch mit sdl arbeitest) schicke mir das bitte mal, damit ich ich mir das mal ansehen kann.

edit: Wenn man ein Bild mit GIMP abspeichert, dann gibt es auch eine Option dafür. Damit kann man sich das sogar selbst aussuchen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 10 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.009s | 16 Queries | GZIP : On ]