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

OpenGL Discussion :

Frustum culling : problème


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut Frustum culling : problème
    Hello.

    Sur un site qui explique le frustum culling, ils disent qu'il faut faire ceci pour obtenir les plans du frustum :
    1) On récupère les matrices de projection et de modélisation d'Open GL (PROJECTION et MODELVIEW)
    2) On les multiplie et on met le résultat dans une matrice 4x4
    3) On extrait les coordonnées des 6 plans de cette matrice
    4) On normalise chaque plan
    Si je ne me trompe pas, la matrice MODELVIEW est en quelque sorte la matrice de la camera.

    Ce que je ne comprend pas : les "coordonnées" des plan du frustum sont fixe, elles ne bougent pas et donc je ne voit pas pourquoi on à besoin de la matrice MODELVIEW pour savoir calculer les plans.

    Quand on bouge dans un monde 3D, c'est pas la camera qui bouge mais les coordonées des objets et on à l'impression que c'est la camera qui bouge, non ?

    Merci d'avance...

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    la matrice modelview permet d'exprimer un vertex dans le repere local à l objet dans le repere de la camera ....

    Si tu veux par exemple tester si un point est d'un cote ou de l autre d un plan, il faut bien evidemment que le point ainsi que le plan soient exprimes dans le meme repere ...

    A partir de la matrice projection (tu obtiens 6 plans de clipping). Ces plans etant exprimes dans le repere camera tu n'as pas besoins de les changer par modelview.

    il suffit exprimer alors le cube englobant d'un objet dans le repere de a camera ... on utilise alors simplement MODELVIEW.

    en fait MODELVIEW est (pour OpenGL) une concatenation de

    1 - system objet vers referentiel global ...

    2 -... referentiel global vers referenciel camera

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut
    Merci pour ta réponse...je comprend plus ou moins tout ce que tu me dit mais je ne comprend toujours pas la raison d'utiliser la matrice de modelview:

    Imaginons une scène avec un seul objet qui se trouve dans le champ de vision comme ceci :
    http://pix.nofrag.com/1/2/e/fad36c8b...9e9a99274.html

    Maintenant si je bouge ma caméra de 10.0 vers la gauche, toutes les coordonnées de l'objet vont changer pour faire croire que la caméra à bouger.
    Mais les coordonnée de mes plans de frustum vont aussi changer vu que leur coordonné dépende aussi de la matrice de modelview.
    Je vais donc me retrouver avec ça : http://pix.nofrag.com/b/1/b/0c5188c0...87a0d6009.html

    Donc peut importe comment ma caméra bouge, mon objet sera toujours dans le champ de vision....ça me semble louche
    Qu'est ce que je n'ait pas compris !

    Le résultat final aurait du être ceci il me semble : http://pix.nofrag.com/6/5/e/7d863567...69338a5d5.html

  4. #4
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    ton champ de vision ne se déplace pas avec les objets comme dans ta première image, les plans du frustum ne sont pas issus de la matrice de modelview seule mais aussi de la matrice de projection où le frustum est paramétré

    je ne sait pas où tu as trouvé ton tutorial sur le frustum culling mais il y en a un bon ici :
    http://www.lighthouse3d.com/opengl/viewfrustum/
    désolé s'il est en anglais mais malheureusement on n'en a pas encore en français
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Par défaut
    Désolé de faire mon chieur mais je ne comprend toujours pas et le tuto ne m'aide pas beaucoup !

    Citation Envoyé par shenron666 Voir le message
    ton champ de vision ne se déplace pas avec les objets comme dans ta première image, les plans du frustum ne sont pas issus de la matrice de modelview seule mais aussi de la matrice de projection où le frustum est paramétré
    - Dans ma première image, rien ne se déplace, j'ai juste mis un axe des X, ça n'indique pas que l'objet se déplace.

    - Pour ce qui est de la matrice de projection, elle ne change pas grand chose à part la perspective, non ? bref rien d'important pour mon problème.

    - "ton champ de vision ne se déplace pas avec les objets" =>
    * pour qu'un objet se déplace, je doit utiliser la matrice de modelview, on est d'accord ?
    * donc si je ne veux pas que mon champ de vision se déplace, il me semble logique de ne pas utiliser la matrice de modelview, non ????!!!!! D'après les tuto ma logique est mauvaise....

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Par défaut
    Les coordonnées de tes objets sont normallement en mémoire par rapport à un référentiel global, la matrice modelview contenant les transformations nécessaires pour faire passer ces coordonnées dans le référentiel de la caméra.
    Grâce à la matrice de projection, tu peux récupérer le frustum dans le référentiel de la caméra.

    Ca, c'est pour la base, maintenant, j'ai l'impression que tu ne comprends pas comment doit être utilisé la matrice modelview: pour pouvoir comparer les objets avec ton frustum, il faut qu'ils soient dans le même référentiel, tu as donc deux solutions:
    - Soit tu transformes les coordonnées de chaque vertex dans le référentiel de la caméra en utilisant la matrice modelview.
    - Soit tu transformes les coordonnées du frustum dans le référentiel global en utilisant l'inverse de la matrice modelview.
    Inutile de dire qu'avec la seconde méthode, il y a beaucoup moins de calcul à faire, et que c'est donc celle ci qui sera le plus souvent utilisée.

Discussions similaires

  1. Problème avec mon view frustum culling
    Par overdrivr dans le forum OpenGL
    Réponses: 1
    Dernier message: 22/08/2011, 22h29
  2. [DirectX 10] Frustum culling et vertex buffer
    Par CrankFlash dans le forum DirectX
    Réponses: 3
    Dernier message: 27/02/2011, 12h44
  3. clipping / frustum culling
    Par Elendhil dans le forum Moteurs 3D
    Réponses: 2
    Dernier message: 13/06/2007, 21h57
  4. Frustum Culling optimisé
    Par Ingham dans le forum Développement 2D, 3D et Jeux
    Réponses: 12
    Dernier message: 19/05/2007, 17h50
  5. Probleme avec du frustum Culling
    Par zlamouche dans le forum OpenGL
    Réponses: 13
    Dernier message: 18/03/2004, 08h29

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