Auflösung stimmt nicht



  • Hi,

    Ich programmiere mit DirectX9c und habe ein Grundgerüst für ein Spiel geschrieben. Bis jetzt geschieht nicht allzu viel spannendes. Es wird ein Fenster erzeugt, ein dummy Image geladen und ein Raster gezeichnet, mit einer Zellengröße von 32 x 32 px. Dabei ist mir aufgefallen, dass die Auflösung des Dargestellten Bereiches wesentlich kleiner ist, als die, die ich eingestellt habe. Ich habe das Fenster mit einer Auflösung von 1024 x 786 px erzeugt und auch der Backbuffer hat die entsprechende Größe. Die Darstellung hat aber nur etwa die hälfte in der Breite und grob überschlagen auch etwa die hälfte in der höhe. Wenn ich die Auflösung zum Beispiel auf 800 x 600 stelle, dann geschieht genau dasselbe, es wird nur etwa ein Viertel angezeigt.

    Ist dieses Problem jemandem Bekannt? Ich habe den Code abgesucht, ob ich evtl. irgendwo die Auflösung halbiere, aber bei der Erzeugung tue ich das nicht und die werte liegen in Macros, die man zur Laufzeit auch nicht ändern kann.

    Wenn noch mehr infos benötigt werden kann ich auch ausführlicher werden oder gar code posten.

    viele grüße
    shane


  • Mod

    vielleicht ein screenshot, das code snipple wo du das fenster erzeugst. es klingt ja eindeutig nach bug und dann vermutlich eher irgendwo in deinem code, falls du keine zusatz library verwendest.

    kannst auch den ganzen code posten (mit code tags bitte 😉 ), falls es nicht zuviel ist.


  • Mod

    vielleicht ein screenshot, das code snipple wo du das fenster erzeugst. es klingt ja eindeutig nach bug und dann vermutlich eher irgendwo in deinem code, falls du keine zusatz library verwendest.

    kannst auch den ganzen code posten (mit code tags bitte 😉 ), falls es nicht zuviel ist.



  • Wenn ich mal so ins blaue raten darf, würde ich sagen liegt das an der Kameraeinstellung. Du zeichnet kein Raster von 32x32 Pixel je feld, sondern allgemeinen 32x32 "längeneinheitn" je Feld. Kann das sein? Bist du sicher das die Angaben die du da machen kannst in Pixel sind?

    Du verwendest ja DirectX9c und somit wohl auch Direct3D zum zeichnen. Wenn du da nicht die orthogonale Projektion vewendest, hast du die Kamera stets zu berücksichtigen.

    Für den Fall das du die Orthogonale Projektion verwendest, könnte ein solcher Effekt durch eine nicht ganz korrekt Projektionsmatrix zustande kommen (hoffentlich habe ich die Bezeichnungen jetzt nicht durcheinander geschmissen).

    cu



  • Falls es daran liegt ein möglicher Lösungsansatz:

    Eine von DirectX vorgefertigte Funktion zur Erstellung deiner Matrix verwenden, D3DXMatrixOrthoLH/RH (oder so ähnlich)

    Und darauf achten, dass die verwendete Breite und Höhe zum erstellen der Matrix die gleichen Werte sind wie beim erstellen des Backbuffers.
    Dann sollte die Fenstergröße eigentlich keien Rolle mehr spielen.



  • so, war ein paar Tage abwesend, aber da bin ich wieder.
    Ich habe den Fehler tatsächlich gefunden, nachdem ich mehrere Stunden danach gesucht habe und dann den Code ignoriert habe 🙂 Es handelt sich um ein gemeinschaftsprojekt und mein "Partner" hat das mit der Translationsmatrix nicht so ganz kapiert. er hat also nicht nur die Position des Sprite um ein Feld, also 32 px versetzt, sondern auch die Translationsmatrix, wodurch der tatsächliche Schritt genau 64 px betraf. Das eigentliche Problem war also, dass das Sprite beim verlassen des Bildschirmrandes laut seinen tatsächlichen koordinaten erst die hälfte des Screens gewandert ist^^ Er ist noch neuer in dx3d als ich und vergass mir seine modifikation in der Render Methode mitzuteilen.

    Drauf gekommen bin ich, als ich ein Raster zeichnen lies und die tatsächlichen px berechnet habe. aufwändig, aber effizient 😃

    Danke für eure Zeit und Lösungsansätze 👍

    euer Shane


Anmelden zum Antworten