Picking et Position 3d

Signaler
Messages postés
184
Date d'inscription
lundi 31 juillet 2006
Statut
Membre
Dernière intervention
26 mai 2016
-
Bonjour
J'ai recuperé un code.
Il fonctionne parfaitement,des que je touche une mesh la value 'hit' devient true et j'ai la distance par rapport a la position de la camera.
Ce que je vourais faire c'est poser cette mesh dans mon monde 3d.
Donc la position 3d de la souris sur le sol.
Voici mon code pour le raypicking:
Merci.

D3DXMATRIX p_matProjection, p_matView, p_matWorld, p_matInverse;
    pDevice->GetTransform(D3DTS_PROJECTION,&p_matProjection);
    pDevice->GetTransform(D3DTS_VIEW, &p_matView);
    pDevice->GetTransform(D3DTS_WORLD, &p_matWorld);
    // use the mouse coordinates to get the mouse angle
    POINT MousePos;
    GetCursorPos(&MousePos);
   ScreenToClient(hWnd, &MousePos);
   if(MousePos.x <0)MousePos.x=0;
   if(MousePos.y <0)MousePos.y=0;

    float xAngle = (((2.0f * MousePos.x) / vx) - 1.0f) / p_matProjection(0, 0);
    float yAngle = (((-2.0f * MousePos.y) / vy) + 1.0f) / p_matProjection(1, 1);

    D3DXVECTOR3 origin, direction;
    origin = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
    direction = D3DXVECTOR3(xAngle, yAngle, 1.0f);
    // find the inverse matrix
    D3DXMatrixInverse(&p_matInverse, NULL, &(p_matWorld * p_matView));
//D3DXMatrixInverse(&p_matInverse,0,&p_matView); 
    // convert origin and direction into model space
    D3DXVec3TransformCoord(&origin, &origin, &p_matInverse);
    D3DXVec3TransformNormal(&direction, &direction, &p_matInverse);
    D3DXVec3Normalize(&direction, &direction);
    // detect picking
    BOOL hit=false;
    float dist = 0;
    D3DXIntersect(entity, &origin, &direction, &hit, NULL, NULL, NULL, &dist, NULL, NULL);