-
Picking RTS C#
Bonjour,
Je programme, depuis quelques mois, un rts en 3D ,et je lutte énormément avec le picking, j'ai lu nombre tutoriels et cours sur le picking en c++ et c#, et je pense avoir assimilé le principe d'où mon problème.
Je m'explique, je voudrais savoir s'il existe une méthode (ou une suite) qui me permettrais de récupérer les coordonnées d'impact du vecteur "lancer" de la caméra sur le mesh?. Car avec ces coordonnées il me serait facile de trouver le mesh correspondant.
Voici comment fonctionne le chargement et l'affichage de mes meshs:
2 listes :
-stockage des meshs du jeu.
-liste des meshs à afficher avec id du mesh correspondant.
La recherche d'un mesh grâce à sa position ce fait simplement avec une méthode de recherche dans la liste 2.
Je ne sais pas si j'ai été assez clair en gros si le joueur clic la méthode me retourne la position x y (et z même sinon nécessaire) dès qu'elle intercepte qu'elquechose le sol ou un mesh. Est-ce possible si oui comment?
J'espère avoir été assez clair dans mes propos merci d'avance
Cordialement
Derbois Corentin
-
D3DXIntersect
Determines if a ray intersects with a mesh.
HRESULT D3DXIntersect(
LPD3DXBASEMESH pMesh,
CONST D3DXVECTOR3 * pRayPos,
CONST D3DXVECTOR3 * pRayDir,
BOOL * pHit,
DWORD * pFaceIndex,
FLOAT * pU,
FLOAT * pV,
FLOAT * pDist,
LPD3DXBUFFER * ppAllHits,
DWORD * pCountOfHits
);
-
Pour le Picking tu peux étudier le Code du Sample Pick de DirectX.
-
Merci de vos réponses, j'avais déjà feuilleté ce sample du sdk mais cela ne correspondait pas à mes attentes.
Est ce qu'il est possible grâce aux HRESULT de D3DXIntersect de récupérer la position de la collision?
merci d'avance.
-
Dans le Sample Pick de DirectX il y a la réponse!
Dans le SDK DirectX 9.0 Sample Pick pour C++.
Je vais te donner la réponse.
Dans les fonctions CMyD3DApplication::IntersectTriangle() et D3DXIntersect().
il y a la variable fDist qui est la Distance entre l'origine du lancer de rayon et le point de collision sur la surface.
Pour avoir la position xyz de collision tu doit faire:
l'origine du lancer de rayon + (la direction du lancer de rayon Normalisé * fDist)
Voila!
-
Effectivement je ne l'avais pas vu comme cela.
Comme quoi il y as tous dans le sdk.
Merci
Cordialement
Derbois Corentin