Menu

Cibler un object sous le curseur

2004-12-15
2013-03-22
  • MasterBaker

    MasterBaker - 2004-12-15

    Une des prochaines etapes du projet sera de reussir a 'cibler'un objet 3D qui se trouve sous le curseur. Chacun des objets aura une (ou des) zones qui pourront en faire une cible valide. Ca ne sera pas necessairement tout l'objet qui sera une cible, mais bien des zones precises sur l'objet.

    Je ne m'y suis pas encore attaque aux tutorials en la matiere. Bl4cklight, tu t'y connais? Est-ce que c'est quelque chose de difficile a programmer?

    Merci!
    MasterBaker

     
    • PLag

      PLag - 2004-12-15

      D'apres moi, il y a deux techniques possibles:

      1 - Faire le calcul d'intersection de la ligne "observateur-curseur" avec les objets eligibles dans la scene

      2 - Faire du "picking" en openGL (renderer les objets dans le backbuffer avec une couleur speciale, et lire la couleur du pixel la ou la souris est...  puis deduire l'objet en fonction de la couleur).  Je crois qu'une telle chose est avec un backbuffer en couleur "indexed".

      La premiere option est la plus puissante d'apres moi.  L'option #2 est limitee s;il y a beaucoup d'objets et peut rendre le rendering plus complexe.
      Si je ne me trompe; vous n'aurez pas 5000 objets en meme temps a l'ecran. donc, le temps CPU est negligeable... #1 est preferable.

      De facon rapide, je dirais que la procedure serait:

      -Tu obtiens la position x,y du curseur
      -Utiliser gluUnProject pour transformer ce x,y en x,y,z (il faut passer la matrice projection et modelview qui ont ete utilisees pour renderer la scene)
      -Avec les deux points (camera) - (x,y,z) ... ca fait une ligne facile a utiliser pour les calculs d'intersection

      Les intersection peuvent etre par exemple
        -Intersection avec un objet "spherique" (la ligne ne doit pas etre plus loin que un certain radius, afin de toucher)
        -Intersection avec un objet "polygonal" (faire l'intersection triangle par triangle)

      enfin... a premiere vue; c'est surement quelque chose du genre qui est necessaire.
      L'optimisation peut etre d'utiliser des structures de donnees afin de faire le test de collisions avec le moins d'objets possibles, ne pas faire le test d'intersection polygonal pour un objet auquel notre distance est superieure a une certaine valeur, etc.
      Il faut aussi trouver l'objet le plus proche; pas celui qui est "en arriere" ce celui que l'on pointe :-)

      Si on parles de "zones" sur l'objet, suffit de definir des polygones sur ces zones... et faire l'intersection avec ceux cis.

      Pour ce qui est des math pour l'intersection ligne/triangle ... ca doit etre assez facile a trouver.

      Ca reponds a la question?

      a+

       
    • MasterBaker

      MasterBaker - 2004-12-15

      Je pense que oui! Sauf que tu mentionnes beaucoup de sujets et de notions OpenGL avec lesquelles je ne suis pas familier. J'ai des croutes a manger en OpenGL, je vais retrousser mes manches et faire un peu de lecture la dessus!

      Merci

       
      • PLag

        PLag - 2004-12-15

        Dans ce que j'ai dit, il n'y a que peu de notions "d'openGL" comme tel.

        une fois que ton point x-y-z correspondant a la souris (resultat de gluUnProject) est fait; le reste ce n'est que du calcul 3D... a l'interieur de tes structures de donnees servant a emmagasiner la "hierarchie" des objets dans ton monde 3D.

         
    • lqz

      lqz - 2006-12-21

      salut a vous
      je suis un fan de rez panzer dragoon et bien sur starfox et je pense que pour ce genre de jeux rien ne vaut l utilisation du joystick voire d une manette
      je crois que l utilisation de la souris pourrait a mes yeux donner au jeu un cote freeware ,jeu de bureau,un peu pas top.je crois que l utilisation d une manette pourrait mieux permettre au joueur de plus facilement s evader.
      je vous dis ca moi je n y connais rien a la progammation ca a l air deja bien laborieux.
      vu qu il n existe pas enormement de ce type de jeux je tiens a vous encourager pour cette superbe idee.

       

Log in to post a comment.