In realer Größe zeichnen [DirectX]



  • Für D3D11 halte ich es für Hobbyisten noch zu früh. Die meisten werden über DX10 Hardware momentan nicht rauskommen. Die wenigsten haben eine DX11 Grafikkarte.

    http://store.steampowered.com/hwsurvey
    Laut Steam gerade mal 5.6%.
    Wird sich dieses Jahr eventuell noch ändern, da Kracher wie BF3 auf DX11 setzen. Aber die Glaskugeln hat nicht immer recht ;).
    Ich würde eher zu OpenGL3 raten, da Spiele auf anderen Platformen immer mehr im kommen sind. Der Mac ist auf dem Vormarsch, die Indie-Studios nehmen Linux ins Visier.


  • Mod

    das schoene an DX11 ist dass es feature level gibt, man also problemlos auf dx9 karten laufen kann und wenn man was neueres irgendwann nutzen moechte, muss man nicht erst von dx9 auf dx11 umsteigen, sondern nutzt ein neues featurelevel.
    von daher wuerde ich dx11 schon empfehlen, selbst wenn man nur dx9 dinge programmieren will.



  • Abgesehen davon kann man mit d3d11 Features von d3d10 Hardware nutzen die man mit d3d10 nicht nutzen kann 😉



  • Vertexwahn schrieb:

    http://msdn.microsoft.com/en-us/library/bb219690(VS.85).aspx

    und nochmal von Nvidia: http://developer.nvidia.com/attach/6586

    abgesehen davon würde ich auf D3D11 wechseln 😉

    Die Frage ist: Wie wende ich das jetzt auf meinen Code an? Im Prinzip rechnet D3D alles für mich, ich habe auch keine Matrizen, mit denen ich hantiere, sondern D3DXMatrixTransformation2D() macht das selbst.

    Aus den Links konnte ich eig. nur entnehmen, dass ich die Position der Sprites um 0.5f in x- und y- Richtung verschieben muss, um eine korrekte Anzeige zu bekommen.
    Das klappt allerding nicht:

    D3DXVECTOR2 trans = D3DXVECTOR2((float)posx+0.5f, (float)posy+0.5f);
    

    Bei meinen weiteren Recherchen hat sich ergeben, dass ich vielleicht die Größe des Backbuffers falsch gesetzt habe. Nun sieht der Code folgendermaßen aus:

    GetClientRect(hWnd, &test);
    pres_param.BackBufferWidth = test.right;
    pres_param.BackBufferHeight = test.bottom;
    

    Laut MSDN werden die Matrizen von DX selbst miteinander multipliziert:

    Remarks

    This function calculates the affine transformation matrix with the following formula, with matrix concatenation evaluated in left-to-right order:

    Mout = Ms * (Mrc)-1 * Mr * Mrc * Mt

    where:

    Mout = output matrix (pOut)

    Ms = scaling matrix (Scaling)

    Mrc = center of rotation matrix (pRotationCenter)

    Mr = rotation matrix (Rotation)

    Mt = translation matrix (pTranslation)

    Mittlerweile habe ich zur Sicherheit alle Variablen, Funktionen usw. auf float gesetzt, damit nichts durch ínts wegfallen kann.


Anmelden zum Antworten