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

Aktuelle Zeit: Fr Jul 18, 2025 07:15

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: S3TC-DXT1 Texturkompression
BeitragVerfasst: So Mai 02, 2010 18:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ich nutze die Extension GL_EXT_texture_compression_s3tc für komprimierte Texturen im Grafikspeicher. Die Daten kommen aus einer DDS-Datei die ich über GTL lade. Übrigens eine sehr schöne Lib, zumindest wenn man C++ nutzt.

Das Wiki kennt diese beiden Kompressionsformate:
Zitat:
GL_COMPRESSED_RGB_S3TC_DXT1
RGB-Daten werden komprimiert, Alpha-Komponente ist immer 1.0.
GL_COMPRESSED_RGBA_S3TC_DXT1
RGB-Daten werden komprimiert, Alpha-Komponente ist entweder 1.0 oder 0.0.


GTL kennt leider nur "FORMAT_DXT1", es gibt also keine Unterscheidung zwischen RGB und RGBA. Die Frage ist nun, kann ich mich frei für eines von beiden entscheiden?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: S3TC-DXT1 Texturkompression
BeitragVerfasst: So Mai 02, 2010 19:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Soweit ich weiß wird im DDS immer die RGBA Variante von DXT1, DXT3 bzw DXT5 benutzt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: S3TC-DXT1 Texturkompression
BeitragVerfasst: So Mai 02, 2010 20:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ok, danke :)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: S3TC-DXT1 Texturkompression
BeitragVerfasst: So Mai 02, 2010 23:38 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
DXT1 hat kein RGBA, es war geplant aber gibt es nicht.
DXT3 und 5 hat RGBA wobei man aber immer DXT5 vorziehen sollte, wenn man Alphawerte hat.

edit: http://de.wikipedia.org/wiki/S3_Texture_Compression

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: S3TC-DXT1 Texturkompression
BeitragVerfasst: So Mai 02, 2010 23:45 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
@Tak2004: In dem Code den du mir gegeben hast benutzt du selbst die RGBA-Variante. Der Alpha-Kanal besteht nur aus einem Bit....das wird dadurch ausgedrückt welcher der beiden Farbwerte eines Blocks der größere ist. Zumindest sagt das Wikipedia.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: S3TC-DXT1 Texturkompression
BeitragVerfasst: Mo Mai 03, 2010 08:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Richtig. Für den ein oder anderen mag das zwar schon als "überhaupt kein Alpha" gelten, weil DXT1 keinen vollwertigen Alphakanal besitzt. Nichts desto trotz hat DXT1 Alphainformationen. Und vollwertig ist bei DXT sowieso ein ganz anderes Thema. Wie Coolcat aber schon gesagt hat richtet es sich danach in welcher Reihenfolge die beiden Farben angeordnet sind. Jedes DXT Bild besitzt einen DXT1 Block. In diesem Block werden die Infos zu 4x4 Pixeln abgelegt. Entsprechend kann das Transparenzbit für jeden Block seperat geregelt werden. Allerdings mit Transparenz geht in diesem Block eine mögliche Farbe verlohren, denn man braucht eine Farbe die als Transparenz gillt ansonsten wäre der gesammte Block transparent (wohl nicht sinnvoll). Sprich der Farbumfang in einem Block ist noch begrenzter als er es sowieso schon ist.

Was jetzt die beiden Konstanten angeht. In der glBitmap benutze ich ausschließlich nur GL_COMPRESSED_RGBA_S3TC_DXT1 zum Hochladen von DXT1 komprimierter Texturen. Wenn die Blöcke Alphainformationen besitzen werden sie ausgewertet und in die Verarbeitung eingeschläußt. Wenn nicht ist das auch egal. Wenn du allerdings RGB_S3TC übergibst dann sollte OpenGL die möglichen Informationen ignorieren. Da die Farben der transparenten Pixel aber nicht definiert sind sollten die alle schwarz werden. Was man aber auch dadurch erreichen kann in den man Blending deaktiviert. Also zum Übergeben der Texturen macht RGB_S3TC eher weniger bis gar keinen Sinn.

Ich behaupte jetzt einfach mal das die Konstante zum Erzeugen von DXT1 Dateien auf der Platte gedacht ist. Du kannst ja auch unkomprimierte Texturen an glTexImage übergeben und mittels InternalFormat dann OpenGL anweisen die Textur komprimieren zu lassen. Und in dem Fall kannst du auch eine RGBA8 übergeben und den Alphakanal ignorieren lassen. Ansonsten würde der bei Alpha 0.5 aufgespittet werden und mit in die komprimierte Textur einfließen. Bei DXT3, 5 ist das nicht weiter tragisch, da die sowieso getrennte Alphainformationen haben und das keinen Verlust an Farbinformationen bedeutet. Bei DXT1 muss man das aber unterscheiden. DXT3 hat fixe Alphawerte und DXT5 hat Miniverläufen ähnlich wie DXT1 das mit der Farbe macht. DXT3 ist sowieso ziemlich sinnfrei, da es im Vergleich zu DXT5 bei gleicher Größe einen deutlich schlechteren Alphakanal besitzt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: S3TC-DXT1 Texturkompression
BeitragVerfasst: Fr Mai 07, 2010 13:40 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Coolcat hat geschrieben:
Die Daten kommen aus einer DDS-Datei die ich über GTL lade. Übrigens eine sehr schöne Lib, zumindest wenn man C++ nutzt.

Diese Aussage muss ich leider wieder zurückziehen. Zumindest unter Linux mit GCC als Compiler ist GTL nicht lauffähig. Ich bekam einige sehr merkwürdige Speicherfehler deren Ursache ich nicht ergründen könnte. Habe jetzt selbst einen einfachen DDS-Loader implementiert.

_________________
Yeah! :mrgreen:


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 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.010s | 15 Queries | GZIP : On ]