Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 13.03.2004, 16:42 Titel: D3DXCreateTextureFromFileEx Problem |
|
|
Hallo,
Ich wollte eine Textur laden mit den Maßen 320*240.
Ich habe die Größen bei den entsprechenden Parametern übergeben und
es gibt auch keinen Fehler.
Wenn ich die Textur direkt nach dem Laden mit der Funktion D3DXSaveTextureToFile wieder speichere, dann sieht sie genau so aus wie die Original-Textur. (sprich: 320*240 Pixel )
Wenn ich diese Textur zum Rendern einer Polygonplatte benutze dann entstehen auf der Textur merkwürdige Artefakte.
Das passiert sowohl im HAL Modus als auch im REF Modus.
Es sind immer die selben Artefakte.
Was kann das sein?
Original:
Fehlerhaft:
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 13.03.2004, 17:10 Titel: |
|
|
Die Textur wird intern im 2er Potenz Format genutzt. Daher können Fehler beim rescalieren auftauchen. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 13.03.2004, 17:24 Titel: |
|
|
Ja. Aber guck dir mal den Fehler an.
Da sieht nach keinem Skalierungsproblem aus.
Wenn er diese Textur zusammengeschrumpft hätte müssten ja irgendwelche Linien fehlen. Dies es aber nicht der Fall.
Außerdem ist die Textur auch intern 320*240 Pixel groß, denn ich habe sie ja mit D3DXSaveTextureToFile korrekt speichern können. |
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 13.03.2004, 17:33 Titel: |
|
|
Wenn du die Textur wieder speicherst, dann wird möglicherweise ganrnichts skaliert, sondern nur kopiert, daher würde es sich erklären lassen, warum der Fehler nur beim Render auftaucht. Probiere es doch mal mit der selben Textur mit einer anderen Größe(2er Potenz). |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 13.03.2004, 18:40 Titel: |
|
|
Das ist allerdings eine seltsame Art und Weise Texturen zu skalieren.
Der 2. Screenshot ist direkt aus dem "Spiel" (Vollbild 320*240 px).
Da stellt sich die Frage: "Auf welche Maße hat er es skaliert?" (von 320*240 zu 320*240 !?)
Wenn man die beiden Screenshots vergleicht stimmt jeder einzelne Pixel (abgesehen von den Artefakten) überein. Daraus folgt, dass DirectX die Textur nicht zusammengeschrumpft hat.
Und wenn er sie "intern" in eine 512*256 Textur gepackt hätte, verstehe ich immer noch nicht diesen seltsamen Fehler.
Wenn ich bei D3DXCreateTextureFromFileEx die Höhe und Breite nicht angebe und danach speichere erhalte ich eine Bitmap mit den Maßen 512*256. Der Rest wird mit schwarz aufgefüllt.
Das ist nun auch innerhalb der Textur so.
Das heißt die 512*256 Textur, mit aufgefülltem schwarzen Bereich, wird auf Polygonplatte gerendert. Da mein Vollbildmodus aber nur 320*240 ist wird die Textur kleingeschrumpft!
Jetzt habe ich eine kleingesschrumpfte Textur mit schwarzen Bereichen auf meiner Polygonplatte. na toll
P.s. Wenn ich eine Textur mit den Maßen 256*128 lade gibt es keine seltsamen Grafikfehler. Aber dann wird ja eine 256*128 Textur auf meinen 320*240 großen Bildschirmbereich gerendert.
Diesen Bildinformationsverlust wollte ich vermeiden.
Ich wollte einfach nur 320*240 Pixel bei einer Aufösung von 320*240 Pixel darstellen.
Sicher gibt es noch andere Möglichkeiten um dies zu realisieren, aber das erklärt leider nicht diesen seltsamen Fehler. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 13.03.2004, 19:12 Titel: |
|
|
KI hat Folgendes geschrieben: |
Sicher gibt es noch andere Möglichkeiten um dies zu realisieren, aber das erklärt leider nicht diesen seltsamen Fehler. |
Stimmt, verwunderlich ist, dass es auch mit dem REF-Device passiert. Was ist, wenn du eine 320x240 Textur mit CreateTexture() erzeugst und die dann im ersten Schritt mit einer Farbe füllst und dann deine Textur reinkopierst oder ein Muster in die Textur kopierst. Wäre halt gut um rasuzubekommen, ob das Rendern der Textur (wie du vermutest) den Fehler verursacht oder schon beim kreiern was schief geht. Kannst du ansonsten ein Minimal-Beispiel mit Code zur Verfügung stellen?
C. |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 13.03.2004, 20:04 Titel: |
|
|
Christian Rousselle hat Folgendes geschrieben: |
Stimmt, verwunderlich ist, dass es auch mit dem REF-Device passiert.
[...]
Kannst du ansonsten ein Minimal-Beispiel mit Code zur Verfügung stellen?
C. |
Nagut. Es war nicht die ganze Wahrheit.
Der Fehler äußert sich im REF Modus etwas anders.
Fehler im REF-Modus:
Hier kann man ein MinimalBeispiel runterladen.
Es ist ein VC.NET Projekt. Es kann allerdings auch mit VC 6 kompiliert werden. Man muss einfach nur ein leeres Win32 Projekt machen und die Quellcodedateien hinzufügen.
P.s. In der User.cfg Datei kann man einstellen ob das Programm im REF oder HAL Modus laufen soll. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 13.03.2004, 21:18 Titel: |
|
|
Was so richtig schiefgeht verstehe ich nicht.
1. Wenn ich eine andere Textur verwende sieht es besser aus, kann aber Zufall sein.
2. Wenn ich auf Lineare Filterung umstelle sieht es richtig aus, bei dir auch?
3. Wenn ich mit XYZRWH Vertices arbeite, ist der Effekt anders, verschwindet aber auf derm REF-Device und auf dem HAL, wenn ich auf lineare Filterung umstelle auch.
4. Wenn ich WS_POPUP ersetzt, z.B. durch 0 verschwindet der Effekt
5. Wenn ich die Fenstergröße ändere sieht der Effekt anders aus.
Ich denke es ist ein Filterproblem. Versuche doch mal auf Screenkoordinaten umzustellen und gucke was dann passiert. Warum benutzt du so viele Dreiecke und nicht nur ein Quad?
Christian |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 13.03.2004, 22:08 Titel: |
|
|
Christian Rousselle hat Folgendes geschrieben: | Was so richtig schiefgeht verstehe ich nicht.
1. Wenn ich eine andere Textur verwende sieht es besser aus, kann aber Zufall sein.
|
Danke für deine Unterstützung.
Ich hab auch mal ne andere Textur genommen und die Grafikfehler waren mit dem bloßen Auge nicht mehr zu erkennen. Wenn man den Screenshot aber genau mit der Origanl-Textur vergleicht fimdet man Unterschiede.
Christian Rousselle hat Folgendes geschrieben: |
2. Wenn ich auf Lineare Filterung umstelle sieht es richtig aus, bei dir auch? |
Wenn ich das mache sieht die Textur ziemlich matschig aus.
Allerdings verwschwindet der andere Effekt.
Christian Rousselle hat Folgendes geschrieben: |
3. Wenn ich mit XYZRWH Vertices arbeite, ist der Effekt anders, verschwindet aber auf derm REF-Device und auf dem HAL, wenn ich auf lineare Filterung umstelle auch. |
Das muss ich noch ausprobieren...
Christian Rousselle hat Folgendes geschrieben: |
4. Wenn ich WS_POPUP ersetzt, z.B. durch 0 verschwindet der Effekt |
Schön wärs. Bei mir hat sich garnichts verändert.
Christian Rousselle hat Folgendes geschrieben: |
5. Wenn ich die Fenstergröße ändere sieht der Effekt anders aus.
|
Ja. Bei mir auch. Weitestgehend sieht er genauso aus.
Christian Rousselle hat Folgendes geschrieben: |
Ich denke es ist ein Filterproblem. Versuche doch mal auf Screenkoordinaten umzustellen und gucke was dann passiert. Warum benutzt du so viele Dreiecke und nicht nur ein Quad?
Christian |
Ich hab jetzt alle möglichen Filter in den unterschiedlichsten Kombinationen ausprobiert. mit HAL, mit REF...
Die ultimative Kombination habe ich leider nicht gefunden.
Ja. Ich versuche es auch mal auf Screenkoordinaten umzustellen (die hab ich noch nie benutzt).
Warum ich soviele Dreiecke benutzt habe? Ich dachte es wäre cool. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 13.03.2004, 22:15 Titel: |
|
|
KI hat Folgendes geschrieben: | Warum ich soviele Dreiecke benutzt habe? Ich dachte es wäre cool. |
Ja, supercool, je mehr Dreieck man nutzt, desto cooler ist man Ich denke es macht in diesem Fall keinen Sinn mehr als zwei Dreiecke zu nehmen, da du durch mehr Dreiecke ja nicht mehr Detail bekommst. In diesem Fall ist es zwar ziemlich egal, aber ich würde Lists Strips bevorzugen. Wenn ich es richtig sehe brauchst du auch keine Vertex-Farbe, oder? Kannst du auch weglassen....
Christian |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 13.03.2004, 22:55 Titel: |
|
|
Okay. Ich probiere es
- ohne Farbe
- mit D3DFVF_XYZRHW
- und 2 Dreiecken ( jetzt soll ich meine ganzen schönen Dreiecke wieder wegmachen)
Aber warum sollte ich List Strips benutzen?
Ich hab in der MSDN gelesen, dass Triangle Strips effektiver sind.
General Performance Tips
und noch eine Frage
Was ist eigentlich der Unterschied zwischen D3DFVF_XYZ und D3DFVF_XYZRHW.
Was bringt das für Vorteile? und warum übergibt man für RHW immer 1.0f?
[EDIT]
Ich habs grad mal mit D3DFVF_XYZRHW probiert und der Effekt ist im REF Modus zwar verschwunden, aber die Textur wird jetzt "hochkant" angezeigt. Also um 90° Grad gedreht. Ist das normal, dass man die Texturkoordinaten dann wieder anpassen muss?
Zuletzt bearbeitet von KI am 13.03.2004, 23:09, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 13.03.2004, 23:06 Titel: |
|
|
Ja probiere es mal. Die Empfehlung ist mir bekannt. Ich weiss aber nicht auf welcher Grundlage sie ausgesprochen wurde. In letzter Zeit hört man von allen Seiten, dass Lists, wenn sie für den Vertex Cache optimiert sind, schneller sind. Außerdem sind sie leichter zu handhaben.
Die D3DFVF_XYZ Vertices sind noch nicht transformiert. D3DFVF_XYZRHW sind schon transformiert, d.h. in Screenkoordinaten. DirectX Graphics sollte die Vertices nicht mehr duch die T&L Pipeline schicken.
C. |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 13.03.2004, 23:45 Titel: |
|
|
Bei mir funktioniert jetzt irgendwie garnichts mehr.
Ich probier morgen weiter.... |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 14.03.2004, 16:21 Titel: |
|
|
Viele Dreiecke bringen aber nettere und genauere Vertexbased Lichteffekte. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 14.03.2004, 16:23 Titel: |
|
|
Ja, wobei hier ein Hintergrund für ein 2D-Spiel verwendet werden soll.
C. |
|
Nach oben |
|
|
|