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 :

retrouver la position absolue dans un scene graph


Sujet :

OpenGL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Points : 36
    Points
    36
    Par défaut retrouver la position absolue dans un scene graph
    Bonjour!
    J'ai quelques problèmes à déterminer ce qui est le plus adapté pour développer mon petit moteur de jeu (projet perso pour apprendre).
    J'ai un système de "scene graph"avec nœuds parents/enfants et chaque objet/entité à une position et rotation relative à son parent.
    Jusque là pas de soucis. Lors du rendu, j'utilise avec succès la récursivité pour traverser les nœuds et j'ajoute successivement la rotation et la position à la matrice courante avant de dessiner les objets.

    Dans mon moteur, tout peut être une entité imbriquée dans la hiérarchie. Aussi bien un mesh qu'une caméra ... et c'est là que ça commence à se compliquer pour moi.
    Comme une caméra peut être "imbriquée" profondément dans la hiérarchie de la scène, je dois retrouver sa position et rotation absolue !
    En effet, comme dans beaucoup d'applis OpenGL j'imagine, dans ma méthode de rendu je procède comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Render(){
      -réglage matrice projection
      -réglage matrice modelView avec position/rotation caméra
      -rendu récursif des éléments de la hiérarchie
    }
    Ça implique donc que j'ai la position/rotation absolue de la caméra à utiliser pour le rendu, mais je ne connais que les relatives !

    Comment gérer ce cas en général ?
    Avant la méthode de rendu j'ai une méthode "d'update". Je pensais l'utiliser pour traverser avec récursivité ma scène et utiliser une matrice comme je le fais pour le rendu (accumulation des positions/rotations et push/pop sur la matrice) pour retrouver facilement la matrice absolue de chaque entité. Ainsi j'aurais tout à disposition pour régler ma caméra lors du rendu.

    De plus, pour chaque entité, je stocke position et rotation sous forme de vecteurs et j'utilise "glRotate","glTranslate" et "push/pop" lors du rendu et non des matrices. Je sais que ce n'est pas terrible et que j'aurais des problèmes, mais c'est le seul moyen que j'ai pour l'instant pour disposer ma scène simplement.

    Serait-il vraiment plus judicieux que je gère tout par matrices ?
    Existe-t-il une méthode simple pour gérer ce genre de cas ? Comment procèderiez-vous ?

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 814
    Points : 7 642
    Points
    7 642
    Par défaut
    Salut

    Citation Envoyé par Norris Voir le message
    Comment gérer ce cas en général ?
    Avant la méthode de rendu j'ai une méthode "d'update". Je pensais l'utiliser pour traverser avec récursivité ma scène et utiliser une matrice comme je le fais pour le rendu (accumulation des positions/rotations et push/pop sur la matrice) pour retrouver facilement la matrice absolue de chaque entité. Ainsi j'aurais tout à disposition pour régler ma caméra lors du rendu.
    Tu peux aussi partir de ton objet, remonter ton scenegraph vers la racine, accumuler les transformations au passage de chaque noeud, et inverser la transformation globale pour avoir la position globale de ton objet.

    Citation Envoyé par Norris Voir le message
    Serait-il vraiment plus judicieux que je gère tout par matrices ?
    perso, je dirais oui.
    Après, tu peux garder ta méthode actuelle pour le rendu (même si les puristes vont hurler que c'est déprécié...), et utiliser les matrices pour avoir ta position d'objet. Ca te permettra de basculer sur du "tout matrice" pour le rendu ensuite.

    Citation Envoyé par Norris Voir le message
    Existe-t-il une méthode simple pour gérer ce genre de cas ? Comment procèderiez-vous ?
    soit par matrice, soit par vecteur+quaternion (pour translation+rotation).

Discussions similaires

  1. [XL-2010] Remplacer nom de cellule par sa position absolue dans une formule par vba
    Par dar06 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/01/2014, 13h51
  2. Réponses: 2
    Dernier message: 08/01/2014, 11h47
  3. Récuperer des positions absolues dans une interface
    Par Lelio1407 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 19/06/2012, 12h00
  4. Réponses: 4
    Dernier message: 28/10/2005, 13h32
  5. [Opera 7 & 8] Position absolue dans conteneur relatif
    Par Sub0 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 16
    Dernier message: 16/08/2005, 23h16

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