Objektauswahl im Leveleditor, Problem



  • Surkevin schrieb:

    Wenn ich Stefan Zerbts Methode mit GetClientRect Daten mache, funktioniert alles, JUHU! Aber wieso kapiert D3DXVec3Unproject das nicht, obwohl ich alles mit 640*480 initalisiere?
    DANKE,
    Gruß,
    Kevin

    Du initialisierst die Größe des Fensters mit 640 x 480, dann musst
    du aber noch die Größe des Titelleiste und des Randes abziehen, dann hast
    du die Größe des Zeichenbereiches.

    Also solltest du das an folgender Stelle so machen:

    D3DSURFACE_DESC ddsd;
    memset(&ddsd,0,sizeof(ddsd));
    
    IDirect3DSurface9 *lpDDS;
    MainObjects.dd_obj.lpD3DDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&lpDDS);
    
    lpDDS->GetDesc(&ddsd);
    
    // Compute the vector of the pick ray in screen space 
    D3DXVECTOR3 v, vPickRayDir, vPickRayOrig; 
    v.x =  ( ( ( 2.0f * ptCursor.x ) / ddsd.Width  ) - 1 ) / matProj._11; 
    v.y = -( ( ( 2.0f * ptCursor.y ) / ddsd.Height )  - 1) / matProj._22; 
    v.z =  1.0f; 
    ...
    

    Wenn ich das Programm bei mir compiliere funktioniert es auch.
    (Die exe von dir hat bei mir eine Accessviolation verursacht)

    Viele Grüße
    Fischi



  • Hatte Stefan nicht von Anfang an gesagt, die Rechnung wäre nicht der Fehler... 😎

    Bye, TGGC \-/



  • Hallo,
    Ja die Berechnung funktioniert ja mit GetClientRect-Daten 🙂 Aber wieso funktioniert die D3DXVec3Unproject-Funktion nicht korrekt, wenn ich mich bewege? 🙂 Cool, dass die Anwendung bei euch Accessviolations verursacht *fg*
    Gruß,
    Kevin


Anmelden zum Antworten