[D3D] Nullpunkt oben links statt unten links?



  • Hallo,
    momentan erstelle ich so meine View-Matrix:

    D3DXMATRIX matView;
    D3DXMatrixLookAtLH(&matView, &D3DXVECTOR3(0.0f, 0.0f, -1.0f), &D3DXVECTOR3(0.0f, 0.0f, 0.0f), &D3DXVECTOR3(0.0f, 1.0f, 0.0f));
    d3dd->SetTransform(D3DTS_VIEW, &matView);
    

    Allerdings ist hier der Nullpunkt (Koordinate 0|0) unten links statt oben links. Wie schaffe ich es, das sie oben links ist?



  • Kanns sein dass du da irgendwas durcheinander bringst? Welchen Ursprung meinst du genau? Wenn du das meinst was ich denke dass du meinst dann h├Ąngt das eher von der ProjectionMatrix ab als von der ViewMatrix...



  • "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 ­čÖé


Log in to reply