[D3D] Cliquer sur un objet

Cliquer sur un objet [D3D] - Programmation

Marsh Posté le 22-12-2001 à 23:19:09    

J'ai essayé d'implémenter une fonction qui en prenant les coordonnées du curseur quand on clique sur la fenêtre, regardait si on cliquait sur un objet ou pas. Mais bon, ça marche pas et je pige pas pourquoi.
 
Donc, j'ai fais des bounding boxs dont je transforme les coordonnées avec la fonction D3DXVec3TransformCoord() en utilisant la matrice WORLD pour l'objet.
 
Le code de ma fonction:
 
bool CObject::ClickTouchOrNot(short x, short y) //x et y coords du curseur
{
 D3DXMATRIX mProjection, mView;
 g_lpD3DDevice->GetTransform(D3DTS_PROJECTION, &mProjection);
 g_lpD3DDevice->GetTransform(D3DTS_VIEW, &mView);
 D3DXMatrixInverse(&mProjection, NULL, &mProjection);
 D3DXMatrixInverse(&mView, NULL, &mView);
 
 D3DXVECTOR3 vPosition = D3DXVECTOR3(x, y, 0);
 D3DXVECTOR3 vDirection = D3DXVECTOR3(0, 0, 1);
 
 D3DXVec3TransformCoord(&vPosition, &vPosition, &mProjection);
 D3DXVec3TransformCoord(&vDirection, &vDirection, &mProjection);
 D3DXVec3TransformCoord(&vPosition, &vPosition, &mView);
 D3DXVec3TransformCoord(&vDirection, &vDirection, &mView);
 
 bool touch = D3DXBoxBoundProbe( &m_vBoundingBoxMin, &m_vBoundingBoxMax,
         &vPosition, &vDirection);
 
 return touch;
}

Reply

Marsh Posté le 22-12-2001 à 23:19:09   

Reply

Marsh Posté le 23-12-2001 à 03:14:36    

une matrice de projection n'est pas inversible. comment veux-tu 'recréer' une nouvelle coordonnée à partir d'une projection sur un plan ?  
 
méthode standard : construire un rayon dans le repère caméra. tu as le point d'origine, la distance au plan de projection, tu peux faire ça facilement. il doit même y avoir une méthode dans d3dx pour. (un rayon est un point + un vecteur de direction)
 
ensuite tu fais ta cuisine comme tu veux, ie tu transformes le rayon et la bbox dans le repère world et tu fais le test là, ou tu transformes le rayon dans le repère local de la bbox, etc.

Reply

Marsh Posté le 25-12-2001 à 21:19:54    

j'crois que tu voulais aller voir
le sample "pick poly" du DXSDK.
 
t'as juste du te perdre en route
mais heureusement de bonnes ames
te remettent sur le droit chemin ;).
 
A+
LEGREG

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed