IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

[3D] Comment savoir si un point est dans mon champ de vision


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 422
    Points : 201
    Points
    201
    Par défaut [3D] Comment savoir si un point est dans mon champ de vision
    Bonjour,

    En 3d, je désire connaitre si un objet 3d vois un autre objet.

    J'aimerai developpez une fonction qui me retourne si l'objet A voit un objet B ?
    Quel sont les paramètre nécessaire pour développer une telle fonction et quel est le pseudocode pour le faire.

    merci, c'est trop mathématique aidez-moi, svp
    ?

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    recherche a frustum culling sous google, tu devrais trouver ton bonheur... en gros on modelise le cone de vision a partir de 6 plan, et une fois qu'on a ces plan, de simple equation te permettent de savoir si le point est dans le cone de vision ou pas.
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ca c'est bien pour déterminer si un objet se trouve dans le champ de vision définissant ce qui est affiché à l'écran, mais s'il s'agit du champ de vision d'un objet quelconque il faut commencer par définir ce champ de vision.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 422
    Points : 201
    Points
    201
    Par défaut
    Disons que je donne un angle et une distance que j'associe à ma strucutre lié à mon objet 3D. angle + distance.

    Mais pour répondre à ta question comment tu le ferais en simple

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    Dans le cas ou les rayons se propagent linéairement:
    si l'objet A associé à un angle de vision défini un cone de direction U et de demi angle au sommet a, il est tres facile de scaner les points de B pour savoir s'ils sont ou non dans le cone.
    B peut alors être externe, à cheval su la frontière ou dans le cone.
    si l'ojet A est etendu cela est 1 peut plus difficile
    on peut soit scanner A soit prendre un sommet"virtuel" en arrière de A.
    On peut aussi être emené à tenir compte l'obstacles dans le champ de vision
    ce qui revient à interdire certaines directions si la distance est > à une valeur.
    Il faut noter que l'on peut tenir compte de l'éclairage de B et de son type de surface ( reflecteur, diffuseur lambertien, ... )
    La notion de visibilité inclue aussi la densité de photons reçus donc
    a- tenir compte angle solide
    b- attenuation dans le (s) milieu(x) traversé(s)

    Si il y a des courbures optiques ( gradient ou saut d'index, attraction ) le problème est plus délicat mais peut se formuler (optique geométrique, relativité) et se résoudre ( en général numériquement )
    cela est + delicat si de plus la lumière n'est pas monochromatique car alors il y a decomposition ( n = n(f) )

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 422
    Points : 201
    Points
    201
    Par défaut
    Ou çà fait compliqué.

    C'est si difficile ?

  7. #7
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    NON!!
    Dans le ca qui vous concerne tres probablement la lumiere se propage suivant des droites et l'étape 1 doit suffire

    Etape 1:
    ----------
    Le problème revient à savoir si géométriquement il existe des droites passant par A et par B dans le cone de vision de A
    Donc si on défini le cone de vision de A par un sommet S, une direction U, et un demi angle au sommet t, alors
    les points P de B définissent un angle T=(U,PM) dont on peut estimer la valeur via
    cos(T) = ( U. PM) ) / (|U|*|PM|) {produit scalaire / produit des normes }
    le point P est dans le cone si T <= t soit cos(T) >= cos(t).

    Si B est étendu il peut tout de même avoir des points de B qui soient dans le cone et d'autres hors du cone. La réponse à votre question serait 'partiellement'.

    - Si A est ponctuel, S=A
    - Si A est étendu, on peut scanner A ou plus simplement prendre un sommet S en arrière de A ( ici on fait l'hypotèse que la section de A suivant la normale à U est axissymétrique par rapport à l'axe du cone} dans ce cas si a est le centre de a et ra son rayon,
    on a Sa/ra = sin(t) d'où S

    Etape 2:
    ----------
    considerer des obstacles dans le champ de vision consite à interdire des directions audelà d'une certaine distance. Si les obstacles sont des sphères, on peut aussi considérer que, pour accepter un chemin dans l'étape 1, on exige que entre A et B, ses distances minimales par rapport aux centres des differents obstacles soient >= à des seuis { pas les mêmes par obstacles}

    Etape 3:
    ----------
    Changement de milieu { comme par exemple un poisson qui regarde voler un insecte }.
    Au passage du dioptre, utiliser de la refraction { n1.sin(i1) = n2.sin(i2) }
    Le + délicat ici n'est pas de suivre un rayon issu de B mais d'être prédictif sur les directions qui passeront par A.
    On peut utiliser ici le fait qu'1 rayon qui passe par A et B minimise
    l'intégrale de A à B de n(x). dl
    Attention: ici il peut y avoir un probleme lié à la nature de l'éclairage car en général n = n ( longueur d'onde ) {exemple arc en ciel }
    On pourrait alors avoir certaine couleurs peut réfactées ( ver le bleu ) qui aillent de A à B dans le cone de A et d'autre + réfractées ( ver le rouge ) qui aillent de A à B en sortant du cone => On voit objet avec changement de couleur

    Etape 4:
    ----------
    le cas d'éléments optiques tels que lentilles, peut être traité par 3 ou dans le cas de lentilles minces par des matrices de passage

    Etape 5:
    ----------
    si n varie de façon continue alors à proioris il n'y a plu que des méthodes purement numériques

    Etape 6:
    ----------
    dans ce qui précede on considère des connections géomériques entre A et B sans se poser la question si B emet et/ou diffuse de la lumière dans cette direction. Dans tout ce qui précede, il faudrait remplacer 'est vu' par 'pourrait être vu'
    si B peut se voir suivant une série de direction, Il faut finalement vérifier si B emet et/ou diffuse de la lumière dans cette direction.
    Par exempe si A est un oservateur localisé en (0,0,100) et regarde l'origine. B est un mirroir circulaire de rayon 1 de centre 0,0,0 dans le plan XY et que l'on eclaire B suivant (-1,-1,-1) alors A ne peut voir B.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Points : 69
    Points
    69
    Par défaut
    Heu, moi je vois une methode relativement simple pour savoir si un objet et dans un CONE de vision d'un autre... il suffit de définir un angle qui déterminera l'angle du cone de vision en question
    soit l'observateur et l'objet X avec chacun une position x y z, on commence par tracer un vecteur qui va de l'observateur vers l'objet (ou soustraint les vecteurs positions et on normalise le vecteur) ensuite, on compare l'angle qu'il y'a entre le vecteur pointant l'objet et une normale en -z de l'observateur avec l'angle arbitraire du cone de vision... si l'angle de "pointage" est superieur a l'angle du cone de vision, l'objet n'est pas dans le cone de vision...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 73
    Points : 69
    Points
    69
    Par défaut
    ben j'avai pas lu la réponse au dessus, mais en gros c'est ce que jp mignot dit...

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    ok
    Inscrit en
    Octobre 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : ok

    Informations forums :
    Inscription : Octobre 2018
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    je me posais la même question, j'ai donc le vecteur qui passe par la caméra et l'objet , je peux comparer ce vecteur avec le vecteur du centre de champ de vision mais ça me donnera un champ de vision circulaire or mon écran est rectangulaire... ?

  11. #11
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Inutile de re up un topic vieux de 12 ans
    Surtout pour le B.A.BA de la 3D (il aurait fallu créer un nouveau topic).

    Et pour ta réponse , il faut juste multiplier ta matrice de ModelViewProjection avec un vecteur (+ division).

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/04/2013, 15h08
  2. [PHP 5.3] Comment savoir si une string est dans une variable
    Par pierrot10 dans le forum Langage
    Réponses: 1
    Dernier message: 29/10/2011, 15h08
  3. Savoir si un point est dans un polygone.
    Par poly128 dans le forum Langage
    Réponses: 8
    Dernier message: 18/11/2008, 09h34
  4. Savoir si un point est dans la zone affiché
    Par nicoenz dans le forum OpenGL
    Réponses: 6
    Dernier message: 08/12/2006, 15h59
  5. [jtable] Comment savoir si le curseur est dans la cellule?
    Par doudine dans le forum Composants
    Réponses: 2
    Dernier message: 23/01/2006, 16h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo