[D3D] Nullpunkt oben links statt unten links?



  • "Nullpunkt links oben" klingt eher nach Viewport Matrix statt View-Matrix.



  • Oh sorry,
    ich hab da wirklich was durcheinander gebracht 🙄 Hab schon lange nicht mehr mit sowas gearbeitet.
    So sieht meine Projektions-Matrix aus:

    D3DXMATRIX matProjection;
    D3DXMatrixOrthoOffCenterLH(&matProjection, 0.0f, static_cast<float>(width), 0.0f, static_cast<float>(height), 0.0f, 1.0f);
    d3dd->SetTransform(D3DTS_PROJECTION, &matProjection);
    


  • Naja entweder die Viewport Transformation anpassen oder da eben die Parameter entsprechend setzen:

    D3DXMatrixOrthoOffCenterLH(&matProjection, 0.0f, static_cast<float>(width), -static_cast<float>(height), 0.0f, 0.0f, 1.0f);
    

    Edit: Ok sry der verschiebt dann in die falsche Richtung. Verwend einfach direkt folgende Matrix:

    2/width      0            0         0
       0       -2/height      0         0
       0         0         1/(zf-zn)    0
      -1         1         zn/(zn-zf)   1
    


  • Danke, aber dann müssen die y-Werte negativ sein.
    Nun aber der Grund was ich vorhabe. Manche Objekte möchte ich mit dem FVF-Flag D3DFVF_XYZRHW und manche mit dme FVF-Flag D3DFVF_XYZ zeichen. Doch leider ist bei D3DFVF_XYZRHW der "Nullpunkt" oben links und bei D3DFVF_XYZRHW der "Nullpunkt" unten links. Das möchte ich vereinheitlichen.



  • Hab oben grad nochmal editiert. Ich würde einfach alles mit Matritzen zeichnen und kein XYZRHW verwenden.



  • Danke, ich werds mal ausprobieren.
    Ich habe aber vor, mein Interface mit XYZRHW zu zeichnen. damit das immer auf der gleichen Stelle vom Monitor ist, und ich mit meinen Matrizen so viel rumspielen kann wie ich will. Ich weiß, dass es noch anders geht, aber so finde ich es am einfachsten.



  • Für das Interface machst einfach eine orthographische 2D-Matrix nachdem du mit 3D fertig bist. Kenn da leider kein DX-Code, aber bei OpenGL geht das ganz einfach mit glOrtho.
    Oder ich hab was falsch verstanden was du machen willst :D.



  • Doch, du hast mich richtig verstanden ist das aber nicht immer ein bisschen aufwendig
    - die alte Matrix temporär speichern
    - die neue Matrix via setTransform setzen
    - zeichnen
    - wieder die alte Matrix setzen
    Gibts da überhauüt großartige Unterschiede beim Ergebnis, außer das eins einer größerer Aufwand ist?



  • Naja, nicht transformierte Vertices sind viel flexibler, du kannst damit so Dinge wie Rotationen etc. machen und natürlich VertexShader verwenden...



  • dot schrieb:

    Naja, nicht transformierte Vertices sind viel flexibler, du kannst damit so Dinge wie Rotationen etc. machen und natürlich VertexShader verwenden...

    Aber die brauche ich ja alle nicht für ein Interface :p
    Aber sehr wahrscheinlich werde ich doch einfach eine orthographische Marix nehmen, da ich im Moment keine möglichkeit sehe, die Sachen mit den gleichen Koordinaten auch an der gleichen Setlle zu haben.



  • Interessierter Programmer schrieb:

    [...] da ich im Moment keine möglichkeit sehe, die Sachen mit den gleichen Koordinaten auch an der gleichen Setlle zu haben.

    Auch wenn ich das für die richtige Entscheidung halte, funktioniert die von mir gepostete Matrix etwa nicht!?



  • dot schrieb:

    Interessierter Programmer schrieb:

    [...] da ich im Moment keine möglichkeit sehe, die Sachen mit den gleichen Koordinaten auch an der gleichen Setlle zu haben.

    Auch wenn ich das für die richtige Entscheidung halte, funktioniert die von mir gepostete Matrix etwa nicht!?

    Oh, sorry vergessen zu sagen, dass ich bei der Matrix gar nichts mehr sehe. Naja aber ich benutye jetzt einfach immer eine 2D-Matrix, dann kann ich den "Nullpunkt" auch unten links halten, was mir eh besser gefällt 🙂


Anmelden zum Antworten