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

[C++] Champ de vision

Bartoniz
Bartoniz
Niveau 9
24 février 2017 à 14:40:44

Bonjour,

Je développe actuellement un jeu d'infiltration en 2D, cependant je suis confronté à un problème avec le champ de vision des gardes.

J'utilise la fonction atan2 afin d'obtenir les angles des deux extrémités du cône, je calcul aussi la distance maxi de vue, et ensuite je compare ça avec l'angle du hero.

Mais, si mes souvenirs sont bon, atan2 calcul un angle à partir du point (0.0) ?

https://image.noelshack.com/fichiers/2017/08/1487943551-kiki.png

Mais je voudrais, que le calcul des angles se fassent depuis le centre du garde, mais je ne sais pas comment faire, et google n'a pas été mon ami sur ce coup. :/

Merci d'avance !

saleGauss
saleGauss
Niveau 9
27 février 2017 à 11:34:29

J'ai du mal à comprendre ton problème exactement. J'ai l'impression que tu appliques directement des formules trigonométriques sans savoir exactement ce que tu cherches à calculer : ça ne peut pas marcher.
Fait un dessin, avec un point P(xp, yp) qui réprésente ton garde. Tu dois connaitre ce point P à chaque instant.
Ensuite, tu as un vecteur direction : là où le garde regarde. Tu dois le connaitre aussi. Le garde voit à une distance de x mètres, soit jusqu'au point M. Son vecteur direction c'est donc le vecteur PM, avec norm(PM) = x.
Ensuite, tu supposes qu'il voit autant en vision périphérique à gauche qu'à droite, et tu centres donc son angle de vision sur le vecteur direction. (note : Ce vecteur direction c'est son vecteur de déplacement si tu considère qu'il ne tourne pas la tête mais qu'il regarde toujours dans la direction de son déplacement). Tu as deux angles de valeur alpha/2 si alpha c'est son angle de vision.
Le point P, le vecteur PM, l'angle alpha, la valeur x, c'est des paramètres de ton algorithme. Ils sont connus au moment où tu dois calculer ton champ de vision. Il va donc faloir trouver une formule qui dépend d'eux.
Voici un schéma rapide : https://image.noelshack.com/fichiers/2017/09/1488191302-frustum.jpg

Maintenant, ta question doit surement être :
comment déterminer si un point quelconque J(jx,jy) représentant le joueur est dans le champ de vision ou pas. Essaye de voir par quel test tu peux répondre à cette question, en utilisant des formules trigonométriques, des produits scalaires, etc. Le but est de répondre oui/non, étant donné des valeurs de P, J, du vecteur PM, de la valeur x, de l'angle alpha. Tu dois utiliser ces valeurs comme parèmètres de ton algo.

On te laisse chercher un peu :)

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