Sprites vs DirectDraw
-
Hi!
Ich hab grad ein 2D-Spieleprojekt am laufen und wollte von DirectDraw auf Sprites umsteigen. Problem: Die Sprites sind unbefriedigenderweise unscharf, da für die Sprites Skalierung erforderlich ist, da sie nicht in Originalmaßen gespeichert werden.
Soll ich:
1. es sein lassen, weil DirectDraw für 2-D-Zeug besser geeignet ist?
2. parallel zu DirectDraw anderen Kram (z.B. Partikel oder 3D-Schrift) mit D3D auf den Bildschirm zeichnen? Krieg ich dann irgendwelche Konflikte?
3. doch Sprites benutzen? Wie kann ich dann erreichen, dass die Sprites auch scharf sind?
-
Eine Bitmap-Skalierung kann nur "scharf" sein, wenn die neue Dimension Vielfache der alten sind.
Du solltest Dir mal NEAREST POINT Sampling, (Bi/Tri)Linear Filtering anschauen, und wofür es da ist.
-
Kann ich Einfluss darauf nehmen, in welchem Format das Bitmap in der Sprite-Textur gespeichert ist? Immerhin will ich als Endgröße ja einen ganz bestimmten Wert und (laut meiner Lektüre) werden diese in einem quadratischen Format gespeichert - das heißt dann wohl, es ist unmöglich, einen scharfen Sprite zu erzeugen, der nicht quadratisch ist??
-
Doch. Du nimmst einfach die nächstgrößere Potenz von 2 und das für beide Dimensionen, legst Dein Bild drauf und machst den Rest transparent.
D.h. 114 x 31 --> 128 x 128
Falls non-quadratic unterstützt wird geht auch 128 x 32
Falls non-power-of-2 unterstützt wird --> 114 x 31
-
Hmm okay, wie ich deinen ersten Vorschlag effizient einsetze habe ich inzwischen herausgefunden (einfach beim laden nicht filtern), aber zu den anderen beiden Möglichkeiten: wie kann ich herausfinden, ob non-power-of-2 oder non-quadratic unterstützt wird? bzw. was ist da ausschlaggebend?
-
mittels IDIrect3D9::GetDeviceCaps() oder IDirect3DDevice9::GetDeviceCaps() (weiss nciht mehr, zu welchem interface das gehört) bekommst du alles über die fähigkeiten deiner grafikkarte heraus
die doku is dabei dein bester freund