JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=9795c44bb090cf33dfd4e44c9da7a321Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

D3DXCreateTextureFromFileEx Problem
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
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

BeitragVerfasst am: 13.03.2004, 16:42    Titel: D3DXCreateTextureFromFileEx Problem Antworten mit Zitat

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. Smile
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 Cool )
Wenn ich diese Textur zum Rendern einer Polygonplatte benutze dann entstehen auf der Textur merkwürdige Artefakte. Confused
Das passiert sowohl im HAL Modus als auch im REF Modus.
Es sind immer die selben Artefakte. Shocked

Was kann das sein?

Original:


Fehlerhaft:
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 13.03.2004, 17:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 13.03.2004, 17:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 13.03.2004, 17:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 13.03.2004, 18:40    Titel: Antworten mit Zitat

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. Arrow 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. Rolling Eyes

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 Confused

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. Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 13.03.2004, 19:12    Titel: Antworten mit Zitat

KI hat Folgendes geschrieben:

Sicher gibt es noch andere Möglichkeiten um dies zu realisieren, aber das erklärt leider nicht diesen seltsamen Fehler. Sad


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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 13.03.2004, 20:04    Titel: Antworten mit Zitat

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. Wink
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. Wink

P.s. In der User.cfg Datei kann man einstellen ob das Programm im REF oder HAL Modus laufen soll.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 13.03.2004, 21:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 13.03.2004, 22:08    Titel: Antworten mit Zitat

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. Very Happy
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. Wink
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. Confused
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. Cool
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 13.03.2004, 22:15    Titel: Antworten mit Zitat

KI hat Folgendes geschrieben:
Warum ich soviele Dreiecke benutzt habe? Ich dachte es wäre cool. Cool


Ja, supercool, je mehr Dreieck man nutzt, desto cooler ist man Wink 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 13.03.2004, 22:55    Titel: Antworten mit Zitat

Okay. Ich probiere es
- ohne Farbe
- mit D3DFVF_XYZRHW
- und 2 Dreiecken ( Crying or Very sad 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. Question
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 13.03.2004, 23:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 13.03.2004, 23:45    Titel: Antworten mit Zitat

Bei mir funktioniert jetzt irgendwie garnichts mehr. Shocked
Ich probier morgen weiter....
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 14.03.2004, 16:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 14.03.2004, 16:23    Titel: Antworten mit Zitat

Ja, wobei hier ein Hintergrund für ein 2D-Spiel verwendet werden soll.

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum