Zoom und D3DXMatrixPerspectiveLH



  • Ich will in einem DirectX Projekt eine Zoom Funktion implementieren. Ähnlich wie in dem Beispiel EnhancedMesh aus dem SDK soll das Objekt mit der perspektivischen Projektion dargestellt werden und mittels Translation/Rotation/Zoom verändert werden können. Jedoch möchte ich einen feinerern, unbeschränkten Zoom als in dem Beispiel erlauben.

    Ich habe momentan die Zoom Funktion über den w Parameter der World Matrix realisiert. Nachteil an dieser Zoom Funktion ist, dass das Objekt bei starken Zoom durch die Clipping Ebenen stößt. Die Berechnung der Projektionsmatrix sieht so aus:

    D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, fAspect, m_fObjectRadius/64.0f, m_fObjectRadius*200.0f );
    

    Also wollte ich die Parameter zn und zf in Abhängigkeit des Objektradius und dem Zoomfaktor berechnen und daraus die Projektionsmatrix neu berechnen, wann immer ich den Zoom veränderte. Doch dummerweise funktioniert das Ganze leider nicht.

    Ich habe alternativ den fovY Parameter als Zoom benutzt.

    // 0 < fovY < PI
    D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4 * zoomfactor, fAspect, m_fObjectRadius/64.0f, m_fObjectRadius*200.0f );
    

    In diesem Beispiel funktioniert der Zoom wie er eigentlich sollte. Aber leider wird das Objekt stark verzerrt wenn ich wegzoome, dann das Objekt nach rechts bewege und dann rotierte. 😞 Also habe ich diese Idee wieder fallen gelassen.

    Frage: Was mache ich hier falsch ?


  • Mod

    Frage: Was mache ich hier falsch ?

    dass du die richtige idee fallen laesst und eine selbstausgedachte machst.

    Bitte ein Bit schrieb:

    // 0 < fovY < PI
    D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4 * zoomfactor, fAspect, m_fObjectRadius/64.0f, m_fObjectRadius*200.0f );
    

    In diesem Beispiel funktioniert der Zoom wie er eigentlich sollte. Aber leider wird das Objekt stark verzerrt wenn ich wegzoome, dann das Objekt nach rechts bewege und dann rotierte.

    meinst du so ?

    :schland:



  • Ja so ähnlich sieht es aus.

    Wenn ich eine Boundingbox um das Objekt lege, sieht es so aus als ob jemand, je nach Rotation, eine Ecke der Boundingbox herausnimmt und daran diese auseinanderzieht und wieder zusammenführt. Aus dem Quader wird ein horizontaler Kirchturm und wird danach wieder zu einem Quader.

    Es erinnerte mich je nach Position auch stark an die Bilder "Wie sähe die Stadt Köln aus, wenn man mit 95% Lichtgeschwindigkeit durchfähren würde ?"


  • Mod

    na also, dann hast du ja eine zoom funktion wie auch jede camera bzw jedes objektiv hat.


Log in to reply