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 :

[Code Review] Comment faire les transformations sur les objets?


Sujet :

OpenGL

  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 897
    Points : 219 633
    Points
    219 633
    Billets dans le blog
    125
    Par défaut [Code Review] Comment faire les transformations sur les objets?
    Bonjour,

    Ma question n'est pas aussi facile que cela pourrai paraitre.
    Lorsque je demande comment faire les transformations ( Translations, rotations, redimensionnement ), je voudrais savoir comment le faire le plus rapidement et le plus facilement possible.

    Disons que j'ai un objet ( un cubeà, que j'utilise un glVertesPointer pour définir ses vertexs.
    Plusieurs choix devant moi existent afin de le déplacer:
    - Je modifie les valeurs des vertexs
    - Je fait un bête glTranslate()
    - Je fait une matrice de transformation à la main

    Je sais bien, que la première possibilité est un peu idiote, et très pénible dans le cas de la rotation.
    La deuxième me semble relativement bien pour peu que je fasse attention au glPop/PushMatrix()
    La troisième est un peu pénible à mettre en place.

    Je voudrais donc savoir, qu'est ce qui est le mieux à faire, en prenant compte des performances et de la facilité du codage/utilisation.

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Points : 413
    Points
    413
    Par défaut
    Salut,

    tout dépend :

    La premiere solution peut etre utile pour faire du batch sur beaucoup de petits objets (des particules par exemple)

    La seconde est la plus simple a mettre en place mais ne va pas forcément convenir pour des scenes complexes. En fait le problème c'est que tu réalises tes transformations au rendu. Du coup tu peux pas vraiment utiliser les tranformations pendant l'update et ca c'est problématique.

    La troisième est ce qui va être utilisé dans un scene graph classique. Le scene graph se charge de calculer les transformations dans le monde des objets en fonction de leurs transformations locales et de leur parent. Ensuite lors du rendu, tu n'a qu'a envoyé ces transformation au GPU. a te permet de ne pas lié la transformation de l'objet au rendu et de ne recalculer que ce que tu dois recalculer. Apres tu peux stoker les transformations sous forme de matrice ou sous forme de traslation / rotation / scale. Après il faut se construire un scene graph (ou en utiliser un tout fait) donc c'est un peu plus long a mettre en place.

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 897
    Points : 219 633
    Points
    219 633
    Billets dans le blog
    125
    Par défaut
    Maintenant, je ne sais plus du tout quoi choisir.
    Mais finalement, dans ce que vous dites, il semble que c'est plus efficace de faire avec les matrices, car chaque objet, recalculerai sa matrice de transformation uniquement quand celui ci bougerai. Sinon il applique directement la matrice qu'il a en mémoire ( dans une classe par exemple ). Du coup on évite la perte de temps que l'on a avec glTranslate ( et autres ) qui nous obligent de refaire une à une les transformations.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Points : 413
    Points
    413
    Par défaut
    Bah le truc c'est surtout qu avec des glPush/glPop tu n as acces qu'aux transformations locales et a la hierarchie des objets, les transformations monde étant calculer directement par le GPU au rendu. C'est problématique dans le sens ou ce sont les transformations monde qui sont utiles pour le calcul : partitionnement, collision/physique, frustum culling... Mais apres tout depend, si tu n'as pas besoins de ces infos, tu peux t'en passer

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 897
    Points : 219 633
    Points
    219 633
    Billets dans le blog
    125
    Par défaut
    Si chaque objet à sa matrice, cela signifie que je peux donc faire facilement les calculs de frustrum culling ( et autre ) car je n'aurais plus qu'a faire la multiplication entre la matrice de l'objet et la matrice du monde (MODELVIEW).
    Dans le cas contraire ( sans matrices ) je ne peux pas faire, car c'est caché par OpenGL.

    Bon, je pense me lancé dans les matrices. Mais je sais que c'est assez "chaud" :s

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/02/2009, 02h44
  2. Comment faire la recherche sur les tables
    Par teZone dans le forum WinDev
    Réponses: 4
    Dernier message: 23/10/2007, 15h36
  3. Réponses: 4
    Dernier message: 10/05/2006, 17h19
  4. [VB6][impression]Comment faire des effets sur les polices ?
    Par le.dod dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/11/2002, 10h31

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