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 :

[formalisme math. & OpenGL] sur le contenu de glVertex3f


Sujet :

OpenGL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut [formalisme math. & OpenGL] sur le contenu de glVertex3f
    Hello tous le monde.

    Ma question est simple:
    Est-ce correct, OpenGLement parlant, d'écrire dans une fonction comme glVertex3f(); des vrais coordonnées, par exemple:
    -> 40.25 en x,
    -> 5.05 en y,
    -> 12.50 en z.

    Je pense que les coordonnées du glVertex3f(); ne sont là que pour définir une taille de base à l'objet à son initialisation (donc au point {0,0,0}),
    et non indiquer une coodonnées dans l'espace qui serait le travail de transformations matricielles (glTranslate, glRotate).
    Je pense même que les coordonnées du glVertex doivent être comprises entre [0.0f - 1.0f].

    Je souhaiterais avoir votre avis sur le sujet.
    merci encore.

  2. #2
    Membre averti Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Points : 332
    Points
    332
    Par défaut
    ne te serais tu pas tromper de fonctions ?

    car glVertex3f(); indique une coordonnée spaciale Donc si tu veux placer un point à x = 30.0f, y = -40.0f et z = 5.0f et bas c'est là pour le faire donc ça serais embétant de borner cette fonction tt de même !

    ne parlerais tu pas plutot de glScalef(); ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Ok.
    Mais alors, quelle différence entre un glVertex3f(); qui contient des coordonnées spaciales comme {50.50, 2.62, 120.42} et un glTranslatef(); ??

    Autant utiliser glVertex3f( avec des coords spaciales ); au moins, lorsque l'on fait un glLoadIdentity(); il n'y a pas le problème de savoir si tous les objets de la scène se sont réinitialisés. On peut considérer que tous les objets restent à leurs places respectives.

    Donc, ca reviendrait à faire des opérations non matricielles, exemple pour un quad ( je ne met qu'un glVertex3f(), ca suffira pour comprendre ):
    - Cas d'une translation : glVertex3f(0.0f+(t++), 1.0f, 0.0f);
    - Cas d'une rotation : glVertex3f(cos(a), sin(a), 0.0f); a++;
    etc....

    Votre avis (et ton avis bob.killer) sur le sujet. merci.

  4. #4
    Membre averti Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Points : 332
    Points
    332
    Par défaut
    Bon alors c'est très simple si par exemple tu veux faire plusieurs objets similaire dans une appli
    Par exemple plusieurs arbres sur un terrain.

    tu va créer un arbre (mesh) que tu va centrer en 0. Pour éviter de remplir la mémoire vidéo avec plusieurs arbres déjà mis à leur positions dans l'espace 3D tu vas les placer dans ton monde grace à glTranslatef();

    tu as un gain au niveau place de vertexbuffer dans ta mémoire vidéo car tu n'as l objet qu une seule fois. Par contre si tu place déjà tt t arbres directement avec des buffers object d'opengl tu vas perdre en place mémoire mais tu n auras pas à appliquer les transformation pour placer t arbres

    en gros glTranslatef(); t'aide a placer facilement t objet sans que tu ai à faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glVertex3f(0.0f+(t++), 1.0f, 0.0f);

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Je comprends pas!
    Je comprends que tu alloue la place en mémoire que pour un seul arbre (texture et coordonnées de l'objet (mesh)), mais je vois pourquoi cela serait plus "économique" de faire un glTranslatef() qu'un glVertex3f( xxx+(t++)).

    De toute façon, on doit faire appel à autant de goupes de glVertex(le groupe qui constitue l'objet) que tu veux construire d'arbres....
    glTranslatef() n'est là que pour déplacer ton/tes groupes de vertices créées.

    Dit moi si je m'égare.
    (en plus, pour ce qui est des meshs, je ne sais pas encore comment charger mon propre model 3d comme un fichier .3ds)

    merci.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    zut corrige la phrase :

    mais je vois pourquoi cela serait plus "économique" de faire un glTranslatef() qu'un glVertex3f( xxx+(t++)).
    par:

    mais je vois PAS pourquoi cela serait plus "économique" de faire un glTranslatef() qu'un glVertex3f( xxx+(t++)).
    ........

  7. #7
    Membre averti Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Points : 332
    Points
    332
    Par défaut
    bas en fait dans ce cas là c'est vrai que ce n est pas plus économique vu que tu envoies l'info glVertex3f() en live à la carte graphique mais si tu utilise les vertexbuffer object là cela devient intéressant

    mais sinon les fonctions de transfo sont là pour t aider, ça te permet de faire facilement des transfo sans avoir à recoder tt ça dans ton prog

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    ok! merci bob.killer!

    Sinon (en sortant du sujet), connais-tu un bon site qui propose des tutoriaux montrant comment fait-on du bump mapping SPECULAIRE et non diffus! le diffus je l'ai déjà fait.
    -> Les sites tels que Paul's Project ou certains tutos de nvidia.developper sont à éviter pour moi, ils sont compliqué MAIS SURTOUT parce qu'il donne, pour faire ce bump SPECULAIRE, un "fragment program" écrit en assembleur!
    Je ne connais pas l'assembleur même si j'arrive à en interpréter un bout.
    C'est l'asm qui me fait lâcher prise (il manquait plus que ça de l'ASM, tiens!) et je ne souhaite pas réutiliser leurs trucs perso à eux mais me faire MON propre programme .
    Heureusement, il y a Cg qui évite de passer par l'asm pour programmer la carte graphique et non le CPU.
    Et puis, il balance toujours des tutos qui montre du bump sur des surfaces compliquées!! il pourrait pas le montrer sur une simple plaque 2D !! GRR.
    ( La je m'énerve tout seul!! )

    Merci encore.

  9. #9
    Membre averti Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Points : 332
    Points
    332
    Par défaut
    je ne sais pas le faire sans shaders dsl

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Ok! Et avec les shaders ??
    Pourrait-tu me montrer un tutoriel qui se rapproche (même avec les shaders) du tuto simplicime de code-sampler (il présentait du bump diffus).

    Meric bob.


    PS: sinon pourrait-tu me donner d'autres liens vers des sites que tu connais traitant du bump spéculaire. (MERCI encore)

  11. #11
    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
    en fait l'eclairage speculair est un bete bump ou la lumiere est place entre la position de l'oeil et la lumiere diffuse, puis le resultat de l'eclairage est mis a une puissance (16 generalement mais en fait tu peut mettre ce que tu veut)...

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/02/2006, 09h24
  2. Réponses: 2
    Dernier message: 26/01/2006, 14h11
  3. Select sur le contenu (image) d'un BLOB
    Par Ryan Sheckler dans le forum Requêtes
    Réponses: 3
    Dernier message: 17/01/2006, 21h04
  4. Index sur le contenu d'une colonne XMLTYPE
    Par haugoyard dans le forum Oracle
    Réponses: 7
    Dernier message: 11/04/2005, 11h10
  5. [VB.NET] Statistique sur le contenu d'un DATASET
    Par stephane93fr dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/01/2005, 13h51

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