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

Aktuelle Zeit: Mo Jul 14, 2025 04:29

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



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 29, 2003 21:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 23, 2003 21:08
Beiträge: 19
Wohnort: Schwitzerland wo alle schwitzen.
Hallo zusammen

Ich kaempfe gerade mit einer Textur lade Klasse. Da Linux (noch) kein GLAUX kennt, steht mir auch die auxDIBImageLoad-Funktion nicht zur Verfuegung.

Weiss jemand hier mehr, wie diese Daten formatiert sein muessen? Muss da einfach (aeh.. schwer ;))
ein BMP in den Speicher geladen werden (bzw. zuerst ein z.B. JPG, dies dann zu BMP umwandeln und anschliessend mittels Speicheraddresse uebergeben)?

Gruss
Joel

_________________
I don't want to know how to copy rights, I want to know how to copy beer!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 29, 2003 22:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wie die Bilddaten, die du entweder glTexImage2D oder gluBuild2DMipmaps übergeben musst im Speicher abgelegt sind, hängt letztendlich davon ab welches Format du dieser Funktion übergibst (mehr siehe <a href='http://www.3dlabs.com/support/developer/GLmanpages/glteximage2d.htm' target='_blank'>hier</a>).Wenn du z.B. GL_RGB als Format nimmst, dann müssen an der Stelle im Speicher die du übergibst die RGB-Triplets direkt hintereinander abgelegt werden.
Du kannst also nicht einfach hingehen und ein Bitmap (im Sinne vom *.bmp-Format) in den Speicher laden und dann z.B. gluBuild2DMipmaps einen Pointer auf die Speicherstelle an der dieses bmp liegt übergeben, da zum BMP-Format ja noch ein Header gehört und dieses AFAIK auch (schlecht) komprimiert wird.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 29, 2003 22:31 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 23, 2003 21:08
Beiträge: 19
Wohnort: Schwitzerland wo alle schwitzen.
Hmm.. ok.. es ist so, dass ich versuche mit der Imagemagick (ist vielleicht einigen von hier ein Begriff) eine API zu basteln zum laden von Texturen. Bisher scheitere ich allerdings irgendwo (ja, irgendwo ist gut ich weiss ;)).
Jedenfalls krieg ich einfach keine Textur auf die ************** ********** ** * ******** *** ****** Quad... <_<

// Edit
Hmm.. mit dem laden scheint allerdings alles i.O. zu sein! Ich kann sogar die Bilder abspeichern und JPG's zu BMP's konvertieren.. ich nehme schwer an, dass irgendwas mit dem Format noch nicht ganz i.O. ist (auch kein wunder bei der auswahl :( )

// Edit 2
Vielleicht geb ich ja zu frueh auf, aber ich denke es ist der Format wie Imagemagick die Bilder intern abspeichert. Dafuer gibt es scheinbar keine gescheiten Zugriff via glTexImage2D (ich hab mich soeben tot gelesen!)

_________________
I don't want to know how to copy rights, I want to know how to copy beer!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jul 29, 2003 23:32 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
schonmal mit SDL befaßt? Vielleicht auch ne Interessante Methode? ;)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 30, 2003 07:54 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 23, 2003 21:08
Beiträge: 19
Wohnort: Schwitzerland wo alle schwitzen.
Ja, hab gestern noch damit angefangen ;).
Ich denke mit SDL_Image werden alle gaengigen Formate unterstuetzt. Und einbinden in mein Geruest sollte
auch kein grosses Problem sein (wenn ich denn mal so ein Bildli laden kann) ;)

_________________
I don't want to know how to copy rights, I want to know how to copy beer!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 30, 2003 14:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 23, 2003 21:08
Beiträge: 19
Wohnort: Schwitzerland wo alle schwitzen.
Wuuuuaaaaah!!!!! Ich habs geschaft! Allerdings laedt der ******* trotzdem nur BMP's! Ich wollte aber nebst BMP auch JPG's und so laden also hab ich extra SDL_image genommen :/ scheinbar speichert der intern auch als JPG ab...
eine Moeglichkeit waere noch, JPG's / andere Bildformate mit Magick umzuwandeln zu BMP und dann zu laden. Vorteil? Naja.. weiss ich auch nicht so recht.. sie brauchen weniger Platz beim Veroeffentlichen? Es ist doch irgendwie eh sinnlos JPG's zu laden und intern eh als BMP zu bearbeiten.. jedenfalls hab ich verstanden, dass OpenGL dies so handhabt..?

_________________
I don't want to know how to copy rights, I want to know how to copy beer!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 30, 2003 15:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also OpenGL behandel intern eh nur die Daten als RAW. Sprich unkomprimiert und wirklich nur die Bilddaten. Und jpg macht wirklich nur dann einen Sinn, wenn man die Größe auf der Platte klein halten möchte (und einem Qualität nicht so wichtig ist). Dann sollte man aber drauf achten, dass jpg eine Verlustkomprimierung ist. Sprich auch mit größter Qualität werden die Daten verändert. Allerdings nur gering und fürs Auge kaum erkennbar. Da ist tga und bmp schon besser. Die komprimieren aber nicht bzw nicht so stark.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 30, 2003 17:38 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 23, 2003 21:08
Beiträge: 19
Wohnort: Schwitzerland wo alle schwitzen.
Hm, was mich eben wundert ist, dass SDL_Image diese Dateien scheinbar nicht unkomprimiert abspeichert intern... naja, vielleicht finde ich noch einen Weg ;). BMP's sind eben schon saugross!

BTW. koennen BMP's eigentlich gut komprimiert werden mit zip? Ich hab bisher noch keine groesseren Mengen komprimieren muessen.

_________________
I don't want to know how to copy rights, I want to know how to copy beer!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 30, 2003 21:02 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
Also ich habe eben mal etwas rumprobiert und versucht eine Textur per Hand zu laden... Und: Es geht ohne jede exthere Libary....

Hier ist der Code für eine BMP:
Code:
  1.  
  2. procedure InitTextures;
  3. var
  4.  &nbsp;textur: tbitmap;
  5.  &nbsp;texdata : array [0..65535, 0..2] of glubyte;
  6.  &nbsp;str : string;
  7.  &nbsp;x,y : integer;
  8.  &nbsp;r,g,b : byte;
  9. begin
  10.  &nbsp;textur := tbitmap.create;
  11.  &nbsp;textur.LoadFromFile('textur.bmp');
  12.  &nbsp;for x := 0 to 255 do
  13.  &nbsp;begin
  14.  &nbsp; for y := 0 to 255 do
  15.  &nbsp; begin
  16.  &nbsp; str := inttohex(textur.canvas.pixels[x,y], 6);
  17.  &nbsp; r := strtoint('&#036;'+copy(str,5,2));
  18.  &nbsp; g := strtoint('&#036;'+copy(str,3,2));
  19.  &nbsp; b := strtoint('&#036;'+copy(str,1,2));
  20.  &nbsp; texdata[(255-y)*255+x, 0] := r;
  21.  &nbsp; texdata[(255-y)*255+x, 1] := g;
  22.  &nbsp; texdata[(255-y)*255+x, 2] := b;
  23.  &nbsp; end;
  24.  &nbsp;end;
  25.  &nbsp;
  26.  &nbsp;textur.free;
  27.  &nbsp;glGenTextures(1, tex);
  28.  &nbsp;glBindTexture(GL_TEXTURE_2D, tex);
  29.  &nbsp;glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_linear);
  30.  &nbsp;glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_linear);
  31.  &nbsp;glTexImage2D(GL_TEXTURE_2D, 0, 3, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, @texdata);
  32.  
  33. end;
  34.  


"tex" ist hierbei die Textur vom Typus "gluint" (bzw. wenn man eine opengl12.pas verwedet ein tglint)

Ach ja: für JPGs geht das natürlich auch:

Code:
  1.  
  2. procedure InitTextures;
  3. var
  4.  &nbsp;textur: tbitmap;
  5.  &nbsp;jpeg : TJPEGImage;
  6.  &nbsp;texdata : array [0..65535, 0..2] of glubyte;
  7.  &nbsp;str : string;
  8.  &nbsp;x,y : integer;
  9.  &nbsp;r,g,b : byte;
  10. begin
  11.  &nbsp;jpeg:= TJPEGImage.Create;
  12.  &nbsp;textur := tbitmap.create;
  13.  &nbsp;jpeg.LoadFromFile('textur.jpg');
  14.  &nbsp;jpeg.CompressionQuality := 100;
  15.  &nbsp;try
  16.  &nbsp;textur.Assign(jpeg);
  17.  &nbsp;finally
  18.  &nbsp;jpeg.free;
  19.  
  20.  &nbsp;for x := 0 to 255 do
  21.  &nbsp;begin
  22.  &nbsp; for y := 0 to 255 do
  23.  &nbsp; begin
  24.  &nbsp; str := inttohex(textur.canvas.pixels[x,y], 6);
  25.  &nbsp; r := strtoint('&#036;'+copy(str,5,2));
  26.  &nbsp; g := strtoint('&#036;'+copy(str,3,2));
  27.  &nbsp; b := strtoint('&#036;'+copy(str,1,2));
  28.  &nbsp; texdata[(255-y)*255+x, 0] := r;
  29.  &nbsp; texdata[(255-y)*255+x, 1] := g;
  30.  &nbsp; texdata[(255-y)*255+x, 2] := b;
  31.  &nbsp; end;
  32.  &nbsp;end;
  33.  &nbsp;
  34.  &nbsp;textur.free;
  35.  
  36.  &nbsp;glGenTextures(1, tex);
  37.  &nbsp;glBindTexture(GL_TEXTURE_2D, tex);
  38.  &nbsp;glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_linear);
  39.  &nbsp;glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_linear);
  40.  &nbsp;glTexImage2D(GL_TEXTURE_2D, 0, 3, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, @texdata);
  41.  
  42. end;
  43.  


Da keine externen Libs verwendet werden denke ich mal, dass dieser Code sogar Crossplatform auf Delphi und Kylix läuft :)
Leider ist der gnaze Code auf eine Texturgröße von 256x256 angepasst... sollte man dieses ändern wolle ist klar, was zu tun ist, oder ;)

_________________
Es sind immer die guten,
welche zu früh von uns gehen müssen...

Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 31, 2003 09:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 23, 2003 21:08
Beiträge: 19
Wohnort: Schwitzerland wo alle schwitzen.
Ja.. aehm.. klar.. allerdings arbeite ich mit C++ ;) (eben, bin der Exot hehe).

However, wenigstens das normalo Texturenladen funzt schonmal. Ich hab ne Klasse daraus gemacht und bin sie gerade noch ein bisschen am schleifen. Vielleicht krieg ich den JPG (etc.) Support ja spaeter hin (Datenabstraktion olé!)

_________________
I don't want to know how to copy rights, I want to know how to copy beer!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 31, 2003 09:50 
Offline
DGL Member

Registriert: Sa Sep 21, 2002 21:32
Beiträge: 346
Wohnort: Eilsum (Nahe Emden)
Tzzz ... Zeit für dich auf Delphi / Kylix umzusteigen ;-)

ne, scherz beiseite: die Typen bzw. die Open Gl-Funktionen, die man braucht müsste ja an sich in C / C++ dieselben sein... Blos kenne ich mit mit C++ in sofern nicht aus, dass ich nicht weiß, wie man ein Bitmap lädt und an die einzelnen Pixel kommt :?

Aber naja: ich hoffe du verstehst den Delphi-Quelltext von mir dennoch, denn dann sollte es an sich kein großes Problem sein, das nach c++ zu convertieren...... :wink:

_________________
Es sind immer die guten,
welche zu früh von uns gehen müssen...

Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 31, 2003 10:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ich weiß ja nicht, wie das in Linux so ist. Aber eine Zahlenwert erst als Text und dann wieder in eine Zahl umzuwandeln ist wohl der schlechteste Weg den man wählen kann.
Zitat:
str := inttohex(textur.canvas.pixels[x,y], 6);
r := strtoint('$'+copy(str,5,2));
g := strtoint('$'+copy(str,3,2));
b := strtoint('$'+copy(str,1,2));
texdata[(255-y)*255+x, 0] := r;
texdata[(255-y)*255+x, 1] := g;
texdata[(255-y)*255+x, 2] := b;


einfacher wäre wohl, wenn man das per Bitshifting macht. Und das sollte auch in Linux gehen.
Code:
  1.   TempInt := Textur.Canvas.Pixels[X, Y];
  2.   // TempInt deswegen weil Pixel einfach zu langsam ist.
  3.   b := TempInt and $FF;
  4.   g := (TempInt shr 8) and $FF;
  5.   r := (TempInt shr 16) and $FF;
  6.   texdata[(255-y)*255+x, 0] := r;
  7.   texdata[(255-y)*255+x, 1] := g;
  8.   texdata[(255-y)*255+x, 2] := b;
  9.  

Dabei entfallen leidige Umwandlungen und das liegt direkt auf Prozessorebene. Schneller (und einfacher) geht kaum noch.

Aber wie gesagt ich weiß nicht, ob das so in Linux verfügbar ist. Sollte aber, weil es ja eh eine Sprache ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 31, 2003 11:58 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 23, 2003 21:08
Beiträge: 19
Wohnort: Schwitzerland wo alle schwitzen.
Mh ich denke nicht, dass er ein Linux Programmierer ist (wenigstens hat ers nicht angedeutet ;)).

Jedenfalls sind dies IMHO keine OpenGL-Funktionen (also in meinen Augen externe/Delphi spezifische Klassen):
tbitmap
TJPEGImage

TJPEGImage nimmt dir ja schon mal die unkomprimierung weg (wenn ichs richtig interpretiere), also den schwierigsten Part ;)

_________________
I don't want to know how to copy rights, I want to know how to copy beer!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 31, 2003 12:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ja TJPEGImage kann man verwenden um damit ein Bild zu dekomprimieren. So habe ich das ja in meiner Texturunit ja auch gemacht. Allerdings bin ich dann mal gleich so dreist und gehe über Scanlines direkt auf den Speicher des Bildes. Aber da du das ja alles eh in C++ machst hat sich das ja eh schon erledigt.

Allerdings solltest du dir evtl mal die Textures.pas von Jan Horn bzw. die glBmp.pas von Jason Allen (http://delphigl.cfxweb.net/) ansehen. Die von Jason Allen lädt TGA direkt. Und die von Jan Horn lädt Bmp's und TGA's direkt. Für Jpg's benutzt er allerdings auch wieder die TJPEGImage.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder 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 | 14 Queries | GZIP : On ]