J'ai cette boucle qui vérifie deux objets. Le problème avec ça, c'est que ça vérifie seulement le premier mais ça ne vérifie pas les autres ... Quand ma boucle vérifie le premier objet à cueillir il dit s'il a été choisi ou non, mais quand il boucle à nouveau pour vérifier le deuxième objet dit qu'il n'a pas été choisi, même quand il a été choisi. Donc ce que j'ai fait est que j'ai changé le processus de vérification. Comme maintenant le deuxième objet est vérifié que le premier objet est vérifié. Donc après avoir fait cela, j'ai obtenu ce résultat, il dit que le deuxième objet a été choisi ou non, il fonctionne bien mais quand il boucle à nouveau il commence à vérifier le premier objet qu'il dit qu'il n'est pas cueilli même quand il a été cueilli. voici ma bouclepour la boucle ne fonctionne pas correctement
for(int i=0; 1>=i; i++)
{
matWorld=entity[i]->s;
// Use inverse of matrix
D3DXVec3Unproject(&rayPos,&rayPos,&vp,&matProj,&matView,matWorld);
D3DXVec3Unproject(&rayDir,&rayDir,&vp,&matProj,&matView,matWorld);
rayDir -= rayPos; // make a direction from the 2 positions
D3DXVec3Normalize(&rayDir,&rayDir);
if(FAILED(D3DXIntersect(entity[i]->pDrawMesh, &rayPos, &rayDir, &hasHit, NULL, NULL, NULL, &distanceToCollision, NULL, NULL)))
{
PostQuitMessage(0);
};
if(hasHit!=0)
{
entity[i]->draw=false;
}
}
une idée?
EDIT 2:
ok je ne pense pas que les gars me compris à droite. Je n'essaie pas de faire vérifier ma boucle plus entity
.
Ok, je vais c'est ce qui se passe.
1. Lorsqu'il boucle pour la première fois, il vérifie si entity[0]
est sélectionné ou non. Cette étape fonctionne correctement.
2. Quand il boucle pour la deuxième fois, vérifie pour voir si entity[1]
est choisi ou pas, VOICI LE PROBLÈME.
ma boucle fonctionne correctement quand elle boucle pour la première fois, mais elle ne fonctionne pas quand elle boucle pour la deuxième fois.
Quand je déboguais j'ai essayé ceci.
1. Quand il boucle pour la première fois, il vérifie si entity[1]
est sélectionné ou non. Cette étape fonctionne correctement.
2. Quand il boucle pour la deuxième fois, vérifie pour voir si entity[2]
est choisi ou pas, VOICI LE PROBLÈME. il semble que, après la première boucle, il y a quelque chose qui ne va pas, mais je ne vois pas ce que c'est. Au fait, je n'ai pas d'erreurs. EDIT 3: La fonction entière
BOOL D3dDevice::Picking(HWND hWnd, LPDIRECT3DDEVICE9 d3ddev, CXFileEntity *entity[4])
{
D3DXMATRIX matProj;
POINT pt;
D3DVIEWPORT9 vp;
D3DXMATRIX *matWorld=NULL;
D3DXMATRIX matView;
GetCursorPos(&pt);
ScreenToClient(hWnd, &pt);
d3ddev->GetTransform(D3DTS_PROJECTION, &matProj);
d3ddev->GetViewport(&vp);
d3ddev->GetTransform(D3DTS_VIEW, &matView);
D3DXVECTOR3 rayPos((float)pt.x, (float)pt.y,0); // near-plane position
D3DXVECTOR3 rayDir((float)pt.x, (float)pt.y,1); // far-plane position
BOOL hasHit;
float distanceToCollision;
for(int i=0; i<=1; i++)
{
matWorld=entity[i]->s;
// Use inverse of matrix
D3DXVec3Unproject(&rayPos,&rayPos,&vp,&matProj,&matView,matWorld);
D3DXVec3Unproject(&rayDir,&rayDir,&vp,&matProj,&matView,matWorld);
rayDir -= rayPos; // make a direction from the 2 positions
D3DXVec3Normalize(&rayDir,&rayDir);
if(FAILED(D3DXIntersect(entity[i]->pDrawMesh, &rayPos, &rayDir, &hasHit, NULL, NULL, NULL, &distanceToCollision, NULL, NULL)))
{
PostQuitMessage(0);
};
if(hasHit!=0)
{
entity[i]->draw=false;
}
}
return hasHit;
}
Cette description est vraiment difficile à lire sans ponctuation. – BBoy
ok im les ajoutant maintenant désolé – Ramilol
Est-ce que ... une phrase? – jwueller