CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Identificati d'objets OpenGl à la souris

IAPIBoy
IAPIBoy
Niveau 1
21 juillet 2004 à 01:15:02

J´écris un module de visualisation 3D avec OpenGl et BC++, ( visualisations décors et lumières dans un spectacle) je cherche une solution pour identifier l´objet dans la scène, pointé par le curseur de la souris, dans la projection 2D. Détection de collision avec la visée de la " caméra" ? Plus simple ? Merci d´avance pour vos lumières !

JeanYvesYves
JeanYvesYves
Niveau 10
21 juillet 2004 à 09:29:51

tu as 2 façons pour bosser pour avoir le résultat :

Directement en 3D :

    • ****************

tu calcules le rayon que défini l´oeil avec le pointeur souris : pour le calculer, il te faut 2 points :
le 1er, c´est le centre de la caméra
le 2e se calcule grace au ratio de la souris par rapport a l´écran sur le plan far : tu connais la distance au plan far, tu peux calculer les coins du plan far. de la, tu appliques la ratio et tu retrouves ton rayon.
Une fois que tu as le rayon, tu regardes s´il coupe la boite englobante d´un objet ( il y a plein d´algos pour cela)
Je ne développe pas trop cette partie car je te conseille l´autre :)

Algo en 2D :

    • *********

tu te sers de glRasterPos pour trouver les positions des 4 coins de l´avant de la boite englobante.
le résultat se retrouve avec glGet() avec le param : GL_CURRENT_RASTER_POSITION
derriere, si tu veux un test minitieux, teste avec les triangles, ( en 2e passe) sachant que l´image d´un triangle est un triangle...

Dans tous les cas, tu auras une liste d´objets qui te répondront vrai. Si tu en as plusieurs, a toi de trouver le plus proche ( position de la boite englobante allignée aux axes peut etre bien fiable)

Voila, je te conseille la 2e méthode, tiens moi au courant si tu as du mal

maskware
maskware
Niveau 8
21 juillet 2004 à 11:02:24

Ou sinon tu peux utiliser glRenderMode(GL_SELECT);

Pour chaque objet de ta scene tu genere un nombre, et au moment de rendre chaque objet, tu met son nombre sur le stack avec glPushName(ID_de_ton_objet); une fois l´objet rendu tu redescend avec glPopName(); Une fois tous tes objets rendus, tu procede a la recuperation de l´ID de l´objet avec glRenderMode(GL_SELECT);

Le code est un peu long, il y a un tutorial ici http://www.gametutorials.com/download/OpenGL/ObjectSelection_OGL.zip c´est simple a utiliser. Tu noteras que la scene est rendue 2 fois, donc n´utilises cette fonction que lorsque t´en a besoin ou au moment du rendu pour la selection, enleve le texturing, etc...

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment