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


Anmelden zum Antworten