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

Aktuelle Zeit: Mi Jul 16, 2025 21:32

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



Ein neues Thema erstellen Auf das Thema antworten  [ 46 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 12, 2004 12:35 
Offline
DGL Member

Registriert: Do Mär 11, 2004 12:33
Beiträge: 24
Gut dann bin ich froh das ich nicht auf dem Schlauch stand :D

mfg mandumoal


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 12, 2004 13:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Woher hat du denn die glBitmap.pas?

Ich glaube das war Absicht von Borland. Da die Methoden alle überladen wurden. Macht aber nix. Die OpenGL.pas von Borland ist so ziemlich das älteste was es an OpenGL Header gibt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 12, 2004 16:21 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich hab gerade auch mal paar Fragen zum Thema:
Stimmt es, dass glBitmap.pas keine 16 Bit TGAs laden kann?
Kann es sein dass nur bei 32Bit TGAs ein Alpha Kanal enthalten ist.
Wenn nein, wieso wird dann der Alphakanal bei 24Bit TGAs net angezeigt?

Und wieso wird png nicht unterstützt? :twisted: :wink:

Das tga Format is ja riesig gegenüber jpg!! (4xxKB <> 86KB!!)
Mann sollte mal ein .jpgA-Format entwickeln!

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 12, 2004 16:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Das TGA-Format hat auch im Gegensatz zum JPG-Format eine verlustfreie Kompression, die natürlich nicht so stark komprimiert wie das JPG-Verfahren. Allerdings ist das für viele Texturen qualitativ besser, und mit großer Wahrscheinlichkeit hast du ein Bildbearbeitungsprogramm benutzt bei dem man die TGA-Kompression nicht aktivieren kann, oder du hast das nicht getan. Und ja, bei 24-Bit kanns ja keinen Alphakanal geben, da hast du jeweils 8 Bit für die drei Farbkomponenten, also nix mehr für nen Alphakanal. 16-Bit TGAs nutzt sowieso keiner, weshalb es sinnlos wäre die extra laden zu können.

Das PNG-Format ist so ne Sache, da Compuserve das entwickelt haben und darauf auch ein Copyright haben, also ist dessen Verwendung manchmal heikel. Ausserdem ists auch nicht sehr viel besser als das TGA-Format.

Alternativ gibts ja noch das DDS-Format (DirectX), das direkt komprimierte Texturen+MipMaps speichern kann, das solltest du dir dann mal ansehen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 12, 2004 16:41 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Danke für die Antwort. Das erklärt einiges...

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 12, 2004 16:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Um dem mal noch etwas hinzuzufügen. glBMP hat png support. Allerdings schleppt er auch ne DLL mit sich rum. Darauf habe ich verzichtet.

Aber wenn sich das jemand mal antun möchte. Soll mir recht sein. Einfach die Klasse TglBitmap2D und TglBitmap1D in einer Externen Unit überschreiben. Die Methode LoadFromStream überschreibe und dann eine Methode machen die so aufgebaut ist wie die internen LoadTga, LoadJpg und LoadBmp. Und diese Methode dann noch in die Kette von LoadFromStream mit einfügen und schon kannst du jedes beliebige Format in glBitmap verwendet. ;-)
Also eigentlich recht Simpel.

Aber mal im Ernst. Ich habe es deswegen weg gelassen, weil diese Formate die Üblichsten sind. Evtl. sollte ich an der einen oder anstellen noch etwas erweitern. Also beim Hinzufügen vom Alphakanal und BMP's. Da nimmt er nur 24. Da könnte man noch ein 8er unterstützen aber das war mir einfach nicht so wichtig.

Allerdings muss ich auch gestehen, dass komprimierte TGA's von glBitmap nicht unterstützt werden. War mir bisher nicht wichtig, da man auch mit der zlib komprimieren könnte und das resultat dabei besser ist. Also kleinere Datei. Wenn sich aber genügend Stimmen finden könnte ich noch features nachrüsten. Diese müssten aber in einem vertretbaren Zeitrahmen zu erledigen sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 12, 2004 17:48 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Hmm, ich mache das so, dass ich meinen Grafikimportfilter auf TPicture aufsetze. Borland hatte hier echt einen Geistesblitz, sodass man in TPicture beliebige Dateiformate registrieren kann, und es zur Laufzeit völlig egal ist, um was für ein Format es sich handelt - einfach auf den Canvas zeichnen (z.B. in ein TBitmap) und fertig.
Wenn man das hat, bindet man noch Lischkes GraphicEx ein und hat sofort Zugriff auf Unmengen an Dateiformaten - und sobald man eine weitere Bibliothek findet, die einen TGraphic Abkömmling registriert, wird das entsprechende Format automatisch mit unterstützt :wink: .
Das ganze klappt natürlich auch für eigene Formate und für den "Bild Öffnen" Dialog - deshalb wird etwa in Carad in eben diesem die Vorschau von DDS Bildern und meinen eigenen Formaten (1D- 2D- 3D- Texturen, Cubemaps) angezeigt, ohne dass ich etwas anderes machen musste, als diese Formate als TGraphic zu registrieren, was ich nach der Logik meines Importfilters ohnehin tun musste...

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 12, 2004 18:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich werde das jetzt aber nicht auf TPicture umstellen. ;-)
Vor allem da man meines Wissens nach ohne Probleme ein TPicture in ein TBitmap verwandeln kann und das kann man dann auch wieder in glBitmap "laden". Isses ja irgendwo dann schon.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 12, 2004 19:39 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Der Ansatz mit der von TGraphic abgeleiteten Klassen ist flexibler und zeigt schön die Möglichkeiten von OOP in Delphi. Insbesondere die Klassenreferenzen (class of...) sind eine tolle Sache. Bei TGA's z.B. würde das aber heißen, daß man das TGA erst auf einen Canvas zeichnen muß und dann vom Bitmap ins endgültige Format wieder konvertiert. Da beim TGA die Daten aber schon fast optimal vorliegen ist das natürlich ein gewisser Umweg. Idealerweise wäre es wenn man da eigenen Klassen entwerfen würde, die als Grundlage direkt ein Byte Array oder Ähnliches haben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 13, 2004 11:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Beim TGA muss ich in meiner Klasse auch erst einmal den Umweg über ein TBitmap machen. Allerding verwende ich ausschließlich die Scanlines welche eine wesentlich höher Geschwindigkeit haben als die Canvas jemals haben wird. Abgesehen davon schicke ich die Bilder auch im BGR Format zur Karte da ab OpenGL 1.2 allekarten das können. Das sparrt auch wieder Zeit beim generieren. Wobei es natürlich auf TGraphic Basis flexibler wäre aber der Aufwand das jetzt umzustellen ist viel zu groß und da TBitmaps ohne Probleme unterstützt werden sollte es dennoch flexibel genug sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 13, 2004 11:38 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Ich poste mal den Code, den ich verwende um Bilder zu laden, die dann direkt in dieser Form an gluBuildMipmaps gesendet werden können, das Zeichnen in den Canvas geht an sich schnell - und ausgelesen werden die Daten natürlich über Scanlines.
Intern verwende ich noch eine andere Routine, die die Bilder gleich auf die nächsthöheren Zweierpotenzen skaliert.
Die geschwungengen Klammern vor jeder Zeile, zeigen an, dass diese automatisch entfernt werden, wenn aus der Entwicklungsversion von BaseGraph die Delphi Releaseversion zusammengestellt wird, weil im Release nur mehr TGA Dateien und eigene Formate über einen eigenen Loader unterstützt werden, da BaseGraph völlig auf die VCL verzichtet.

Code:
  1. {}function LoadPictureImage(FileName : String) : PRGBAImage;
  2. {}
  3. {}  var
  4. {}    pic : TPicture;           // picture object
  5. {}    bmp : TBitMap;            // bitmap graphics
  6. {}    w,h : integer;            // width and height of picture
  7. {}    img : pRGBAImage;
  8. {}    l,c : integer;
  9. {}    hlp : byte;
  10. {}
  11. {}  begin
  12. {}    img := NIL;
  13. {}    pic := TPicture.Create;
  14. {}    bmp := TBitMap.Create;
  15. {}  try
  16. {}    pic.LoadFromFile(FileName);
  17. {}    w := pic.Width;
  18. {}    h := pic.Height;
  19. {}
  20. {}    bmp.PixelFormat := pf32Bit;
  21. {}    bmp.Width := w;
  22. {}    bmp.Height := h;
  23. {}    bmp.Canvas.Draw(0,0,pic.Graphic);
  24. {}
  25. {}    new(img);
  26. {}    with img^ do begin
  27. {}      width := w;
  28. {}      height := h;
  29. {}      GetMem(data, w * h * SizeOf(TRGBA));
  30. {}      for l := 0 to h-1 do
  31. {}        Move(bmp.ScanLine[l]^, data^[l*w], w*4);
  32. {}
  33. {}      // store rgba rather than bgra images
  34. {}      for l := 0 to h-1 do
  35. {}        for c := 0 to w-1 do with data[l*w+c] do begin
  36. {}          hlp := r;
  37. {}          r := b;
  38. {}          b := hlp;
  39. {}          a := not(a);
  40. {}        end;
  41. {}
  42. {}    end; // with
  43. {}
  44. {}  finally
  45. {}    pic.Free;
  46. {}    bmp.Free;
  47. {}    result := img;
  48. {}  end;
  49. {}
  50. {}  end;
  51.  


Das Ganze ist also relativ simpel - und würde glBitmap sogar noch vereinfachen, da die Texturklasse immer noch auf TBitmap aufbauen kann, du dir aber keinerlei Gedanken über Bildformate machen musst, da TPicture anhand der Erweiterung automatisch erkennt, um was für eine Datei es sich handelt, und diese korrekt lädt, wenn die Erweiterung als TGraphic registriert ist.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 13, 2004 13:14 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Zitat:
... da TPicture anhand der Erweiterung automatisch erkennt ...

Ja und genau da ist mein Problem. Wie will man es dann fertig bringen eine Datei mittels Stream zu laden. Sagen wir Per Internet über die IndyKomponenten oder per CompressedStream von zlib? Das geht so einfach nicht. Das ist mir persönlich aber wichtig.

Um den Code glBitmap kompatibel zu machen müsste man nur bei einer Instanz von glBitmap lediglich AssignFromBitmap aufrufen. Dann wandern die Daten in die Texturklasse. Diese Methode verwende ich intern ja auch.

OffTopic: Warum hast du bei dir {} vor jeder Zeile. Hat das nen Besonderen Grund?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 13, 2004 13:40 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Ja,
Zitat:
Die geschwungengen Klammern vor jeder Zeile, zeigen an, dass diese automatisch entfernt werden, wenn aus der Entwicklungsversion von BaseGraph die Delphi Releaseversion zusammengestellt wird, weil im Release nur mehr TGA Dateien und eigene Formate über einen eigenen Loader unterstützt werden, da BaseGraph völlig auf die VCL verzichtet.


Ich habe mir ein Tool geschrieben, mit dem man aus vielen bestehenden Sources sehr leicht eine (oder mehrere) große Bibliotheken zusammenlinken kann, da ich dies für eine Weitergabe angenehmer empfinde, als ein Sammelsurium vom Units, von denen niemand weiß, welche nun konkret eingebunden werden muss. Abgesehen davon, kann ich so genau steuern, was weitergegeben wird und was nicht - und es spart mir viel Zeit.
Zum Entwickeln sind hingegen thematisch gegliederte Module angenehmer.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 13, 2004 13:46 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
@Datei von Stream laden
es geht schon (über einen kleinen Umweg):
man entpackt einfach die Datei mit entsprechenden Namen ins temporäre Windows Verzeichnis, das man so bekommt:
Code:
  1. function WindowsTemp : String;
  2. var
  3.   Buffer : Array[0..Max_path] of char;
  4. begin
  5.   FillChar(Buffer,Max_Path + 1, 0);
  6.   GetTempPath(Max_path, Buffer);
  7.   Result := String(Buffer);
  8.   if Result[Length(Result)] <> '' then Result := Result + '';
  9. end;
  10.  

und kann dann mit den Dateien machen, was man will - aber du hast natürlich recht, dass glBitmap, so wie du es aufgebaut hast, über AssignFromBitmap bereits mit jedem TGraphic Abkömmling genutzt werden kann.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 13, 2004 14:44 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Oh wer lesen kann ist klar im Vorteil. ;-) Habe ich wohl irgendwie überlesen.

Und der Umweg über die temporären Dateien geht schon. Aber ganz ehrlich gefällt mir so ein weg überhaupt nicht. Da direkte Streams wesentlich besser sind. Aber das ist mal wieder etwas was in die Kategorie Geschmackssache zu legen ist. ;-)


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


Wer ist online?

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.

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