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

Aktuelle Zeit: Fr Jul 11, 2025 07:29

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: DDS und Cubemaps ohne MipMaps
BeitragVerfasst: Do Okt 26, 2006 11:05 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Hi,
mein DDS_Loader ist jetzt soweit am Laufen und kann ohne Probleme auch Cubemaps mit integrierten MipMaps laden.
Sobald ich jetzt aber eine Cubemap ohne MipMaps lade wird die Textur nicht erstellt.

Erstmal der (Pseudo)Code zum Laden:
Code:
  1.  
  2.       glGenTextures(1, @texture);
  3.       glBindTexture(GL_TEXTURE_CUBE_MAP, texture);
  4.  
  5.       glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  6.       glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  7.      
  8.      for i:=0 to MipMapCount -1 do
  9.        glCompressedTexImage2D(Target, i, internalformat, DivN(DDSHeader.dwWidth, Power(2, i), 1), DivN(DDSHeader.dwHeight, Power(2, i), 1), 0, Size, Image);
  10.  

Dabei ist Target:
GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z in der Reihenfolge.
Die Schleife sorgt dafür, dass die entsprechenden MipMaps mitgeladen werden. Bei der Datei ohne MipMaps wird pro Target eine Textur mit Level 0 erstellt.
Abgesehen von dem Compressed entspricht es also dem Laden einer Cubemap aus 6 einzelnen Bildern.


Die Datei aus der die Cubemap geladen wird, wurde übrigens mit dem Nvidia PS-Plugin in der Version 5 abgespeichert. Die Version mit Mipmaps wird ohne Probleme geladen, die entsprechende ohne leider nicht.

Habt ihr irgendwelche Ideen an was es liegen kann?

------------------------------------------------------------------------------------------------------------------------------------------------------

Dann habe ich noch eine weitere Frage wegen dem DDS-Format. Nach der MS-Dokumentation sollte für jedes Target ein entsprechende Flag gesetzt sein:
Zitat:
... and one or more of DSCAPS2_CUBEMAP_POSITIVEX/Y/Z and/or DDSCAPS2_CUBEMAP_NEGATIVEX/Y/Z should be set.

Zumindest das Nvidia Plugin hält sich da nicht dran.
Wie verhalten sich da euere DDS-Dateien wenn ihr welche habt?

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 26, 2006 11:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hast du bei deinem Filter noch MipMaps angegeben? Wenn ja dann MUSST du auch MipMaps haben oder erstellen lassen. Anderenfalls genügt es, wenn du die Filter (kann mir nie merken welcher das ist) da einfach den MipMap Teil weglässt. Das ist im übrigen ein generelles Problem und nicht nur bei MipMaps.

Also ich kann zwar MipMaps aber ehrlich gesagt betrachte ich die als Einzelbilder. Das soll bedeuten, dass ich DDS CubeMaps noch gar nicht so richtig selberladen kann. Aber ich würde mal davon ausgehen, dass das gesetzt sein muss bzw sollte. Wenn dem nicht der Fall wäre könntest du gar nicht sagen welches Bilder welche Plane ist und damit wäre die Speicherung von Cubemaps in einem solchen DDS ziemlich für die Füße.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 26, 2006 12:43 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
Ich hab die Mipmaps/Cubemaps zwar noch nie geladen, aber existent sind sie in den DDS Dateien laut dem Debug Output den mein Programm ausspukt. Hab die Texes eben mit der aktuellen Version des Plugins erstellt. Hab dir zusätzlich mal die beiden Texturen beigelegt, kannst ja schaun ob du damit eine Ausgabe bekommst.

Und hier der entsprechende Part aus dem Log
Zitat:
Log: Loading DXT Texture: textures/rz3_cm.dds
Log: -----------------------------------------------------
Log: DDSurfaceDesc2 Debug Info:
Log: Magic DDS: DDS
Log: DDS Size: 124
Log: DDS Flags: 659463
Log: DDS Height: 512
Log: DDS Width: 512
Log: DDS PitchOrLinearSize: 262144
Log: DDS Depth: 0
Log: DDS MipMapCount: 10
Log: DDS Reserved: 0

Log: PixelFormat Size: 32
Log: PixelFormat Flags: 4
Log: PixelFormat Four CC: 861165636 (DXT3)
Log: PixelFormat RGBBitCount: 0
Log: PixelFormat RBitMask: 0
Log: PixelFormat GBitMask: 0
Log: PixelFormat BBitMask: 0
Log: PixelFormat RGBAlphaBitMask: 0

Log: CAPS2 Caps1: 4198408
Log: CAPS2 Caps2: 65024
Log: CAPS2 Reserved: 0
Log: DDS Reserved2: 0

Log: Cubemap found
Log: Cubemap DDSCAPS2_CUBEMAP_POSITIVEX found
Log: Cubemap DDSCAPS2_CUBEMAP_NEGATIVEX found
Log: Cubemap DDSCAPS2_CUBEMAP_POSITIVEY found
Log: Cubemap DDSCAPS2_CUBEMAP_NEGATIVEY found
Log: Cubemap DDSCAPS2_CUBEMAP_POSITIVEZ found
Log: Cubemap DDSCAPS2_CUBEMAP_NEGATIVEZ found


Log: Loading DXT Texture: textures/rz3_cm_nmm.dds
Log: -----------------------------------------------------
Log: DDSurfaceDesc2 Debug Info:
Log: Magic DDS: DDS
Log: DDS Size: 124
Log: DDS Flags: 528391
Log: DDS Height: 512
Log: DDS Width: 512
Log: DDS PitchOrLinearSize: 262144
Log: DDS Depth: 0
Log: DDS MipMapCount: 0
Log: DDS Reserved: 0

Log: PixelFormat Size: 32
Log: PixelFormat Flags: 4
Log: PixelFormat Four CC: 861165636 (DXT3)
Log: PixelFormat RGBBitCount: 0
Log: PixelFormat RBitMask: 0
Log: PixelFormat GBitMask: 0
Log: PixelFormat BBitMask: 0
Log: PixelFormat RGBAlphaBitMask: 0

Log: CAPS2 Caps1: 4104
Log: CAPS2 Caps2: 65024
Log: CAPS2 Reserved: 0
Log: DDS Reserved2: 0

Log: Cubemap found
Log: Cubemap DDSCAPS2_CUBEMAP_POSITIVEX found
Log: Cubemap DDSCAPS2_CUBEMAP_NEGATIVEX found
Log: Cubemap DDSCAPS2_CUBEMAP_POSITIVEY found
Log: Cubemap DDSCAPS2_CUBEMAP_NEGATIVEY found
Log: Cubemap DDSCAPS2_CUBEMAP_POSITIVEZ found
Log: Cubemap DDSCAPS2_CUBEMAP_NEGATIVEZ found


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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


Zuletzt geändert von Evil-Devil am Do Okt 26, 2006 13:02, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 26, 2006 12:57 
Offline
DGL Member

Registriert: So Feb 19, 2006 23:46
Beiträge: 55
Wenn keine Mipmaps vorhanden sind, kannst du sie ab OpenGL 1.4 durch die Grafikkarte erstellen lassen. Dazu gesellst du zu den Filtereinstellungen folgenden Aufruf:
Code:
  1. glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_GENERATE_MIPMAP, GL_TRUE);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 26, 2006 13:36 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das meinte ich mit erstellen lassen. ;)

Wobei es auch noch die Extension GL_SGIS_generate_mipmap gibt. Das ist die Extension die dem Teil aus dem OpenGL 1.4 Kern zu Grunde liegt. Sie wird selbst auf OpenGL 1.2 Karten unterstützt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 26, 2006 13:59 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Lossy eX hat geschrieben:
Hast du bei deinem Filter noch MipMaps angegeben? Wenn ja dann MUSST du auch MipMaps haben oder erstellen lassen. Anderenfalls genügt es, wenn du die Filter (kann mir nie merken welcher das ist) da einfach den MipMap Teil weglässt. Das ist im übrigen ein generelles Problem und nicht nur bei MipMaps.

Code:
  1. glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  2. glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

\":)\" deswegen hatte ich mal mit oc2k1 und waran geredet und habe daraufhin die Filter auf das entsprechende gesetzt.

Code:
  1. glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_GENERATE_MIPMAP, GL_TRUE);

hatte ich auch drinnen, hatte aber das Problem nicht gelöst.




Jetzt war Evil-Devil aber so nett, mir 2 DDS-Dateien zu geben, sodass ich mal eben an einen Windowsrechner gehen konnte um es zu testen (Wine mag die Demo nicht und FPC ist nicht installiert bzw. nicht über fpc aufrufbar *sick*).
Dort wurden beide Dateien angezeigt, was mich sehr erstaunt.
Kann natürlich sein, dass die alte Version des Plugins da fehlerhaft ist. Leider gibt es kein Changelog und läuft die neue Version nicht mehr mit Paint Shop Pro :(
Naja, aber so oft werde ich wohl nicht mit DDS-Dateien ohne Mipmaps Kontakt haben und wenn es nur ein Fehler in meiner Datei ist, ist es gut.

Ich werde daheim nochmal dem genauer nachgehen und mich dann melden, aber meine Vermutung steht schon oben.
Und wegen der anderen Frage:
Ich vermute, dass sie auch aus dem Fehler resultiert. Genaueres aber im Laufe der Tage.

Dann vielen Dank für die Antworten und Vorschlägen.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 26, 2006 14:06 
Offline
DGL Member

Registriert: So Feb 19, 2006 23:46
Beiträge: 55
GL_SGIS_generate_mipmap und die entsprechende Funktionalität aus OpenGL 1.4 haben übrigens exakt die gleichen Konstanten, von daher ist es egal welche man benutzt. Wenn man ein Abwärtskompabilitätsfanatiker ist, kann man dann natürlich auf die SGI-Extension prüfen statt gleich OpenGL 1.4 zu verlangen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 26, 2006 14:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
i0n0s: Holzauge sei wachsam. Jetzt wo du es noch mal direkt vor die Augen gehalten hast habe ich es auch gesehen, dass es oben auch schon stand. Das kommt davon wenn man sich das nicht ganz durchliest. :roll:

yoni: Ich weiß, dass die Konstanten die Selben sind. Und ich meinte es nicht nach dem Motto, dass man entweder auf SGIS oder auf 1.4 überprüft. Man kann ja auch überprügen ob SGIS oder 1.4 vorhanden ist. Das ist ein zusätzliches Boolean in der If Abfrage und man hätte das ganze gleich ein Stück kompatibler gemacht. Das ist alles.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 30, 2006 13:11 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Ok, hat etwas länger gedauert, aber ich weiss jetzt was die Gründe für die Fehler waren:

Cubemap ohne MipMap funktioniert, nur setzt das Tool von Nvidia in der alten Version nicht alle Flags für Cubemaps, somit wird sie bei mir nicht als Cubemap geladen.

Die Seiten der Cubemap werden in allen Dateien benannt, dass war nur ein etwas doofer Fehler bei mir in den Abfragen (Copy & Paste und zuwenig Edit :( ).

Dann nochmal Danke für eure Hilfe.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


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


Wer ist online?

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