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 :

Précision sur glPolygonOffset


Sujet :

OpenGL

  1. #1
    Membre actif Avatar de Robxley
    Homme Profil pro
    Docteur ingénieur traitement d'image
    Inscrit en
    Mai 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Docteur ingénieur traitement d'image

    Informations forums :
    Inscription : Mai 2009
    Messages : 158
    Points : 228
    Points
    228
    Par défaut Précision sur glPolygonOffset
    Le mieux est de commencer par un petit rappel de la fonction en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void glPolygonOffset( GLfloat factor, GLfloat units );
    Cette fonction est utilisée dans le cas de superposition d'objet lors par exemple de techniques "multipasse" pour éviter le scintillement entre une même face dessinée plusieurs fois en ajoutant un offset au niveau du z buffer à l'une ou l'autre des faces.

    J'ai bien compris son intérêt, cependant j'ai mal compris son fonctionnement si quelqu'un peu m'expliquer exactement le calcul qui est fait sur la face concernée.

    De ce que j'ai compris dans l'aide fournie en ligne.

    Si on a notre surface dans le z-buffer à la postion z lorsqu'on utile la fonction glPolygonOffset on calcule alors une nouvelle valeur de la profondeur z' par l'opération :

    z' = z + offset
    avec : offset = factor *DZ + r * units (données dans l'aide de la fonction).

    Déjà est ce que l'opération effectuée est bien celle-ci, où aurais-je mal compris.

    Et que signifie les DZ et r.
    Si j'ai bien compris le DZ dépendrait de la position à l'écran de l'objet et r correspondrait à un coefficient fixe (d'ailleurs comment est-il choisit ? en fonction de notre matrice de projection ? avec le Znear, Zfar ?)

    Je galère dans mon application pour fixer justement les valeurs de factor et units que je fixe pour l'instant au pif, mais bon j'ai pas trop l'aléatoire même si ca marche. Si quelqu'un peut m'éclairer.

    Merci.
    Rien ne sert de courir, mieux vaut partir à point. Programmer aussi d'ailleurs.
    Surtout, mais surtout pas d’astuces !
    Pas de bras, pas de chocolat. Les deux mains sur le clavier.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Pouvez vous me donner le lien de la doc que vous avez trouvé. Juste pour que je ne parle pas d'un truc différent .
    Sinon la fonction peut s'utiliser avec des valeurs aléatoire, tant que l'on crée le décalage, c'est bon ( c'est ce qui compte le plus ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre actif Avatar de Robxley
    Homme Profil pro
    Docteur ingénieur traitement d'image
    Inscrit en
    Mai 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Docteur ingénieur traitement d'image

    Informations forums :
    Inscription : Mai 2009
    Messages : 158
    Points : 228
    Points
    228
    Par défaut
    Pour la doc souvent je vais voir sur le man de opengl.org.

    http://opengl.developpez.com/docs/ma...lpolygonoffset

    Certes, pour l'instant c'est ce que je fais, je prends des valeurs aléatoires cependant il est toujours préférable de bien comprendre ce qu'on fait.
    Rien ne sert de courir, mieux vaut partir à point. Programmer aussi d'ailleurs.
    Surtout, mais surtout pas d’astuces !
    Pas de bras, pas de chocolat. Les deux mains sur le clavier.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Donc en ayant lu la documentation, je peux dire que 'r', est une valeur déterminé par l'implémentation ( pilote / carte graphique ) qui indique la plus petite valeur calculable ( sans perte donc ) par l'implémentation.
    Dans un exemple complètement bidon, si mon implémentation fait tout les calcul avec des 'int', r équivaut à 1.
    Car je ne pourrais jamais être plus précis.
    Dans le monde réel, ça doit être la précision que peut atteindre un float sur 32bits ( ou un truc du genre ), ce qui doit donner un truc du genre 0.00000 ... 01

    Maintenant pour DZ, c'est le décalage que le polygon a, dans l'espace écran. Bon alor là, pour l'expliquer, je vais surement pas y arriver.
    Comme tout le monde le sais l'espace écran, c'est les coordonnées finales des points ( souvent de -1 à 1 ). Bien sur, DZ est donc une profondeur virtuelle ( vu que l'écran est plat ) mais elle indique la profondeur qu'à l'objet.

    En espérant que cela aide.

    Maintenant, pour les valeurs à mettre, il faut savoir que le mieux, c'est de mettre (0 , ou 1 ) dans le facteur est 1 dans le unité
    Comme je l'ai dit précédemment, le principal c'est de faire un décalage, ce décalage n'est répercuté qu'a la fin du pipeline. r, fera en sorte que la valeur est très petite. Donc mettre 0 et 1, fera un décalage super petit, mais assez pour que la machine s'en rende compte.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Points : 1 630
    Points
    1 630
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Maintenant pour DZ, c'est le décalage que le polygon a, dans l'espace écran. Bon alor là, pour l'expliquer, je vais surement pas y arriver.
    Comme tout le monde le sais l'espace écran, c'est les coordonnées finales des points ( souvent de -1 à 1 ). Bien sur, DZ est donc une profondeur virtuelle ( vu que l'écran est plat ) mais elle indique la profondeur qu'à l'objet.
    Non. DZ n'est pas les coordonnees finales mais une differentielle (d'ou le D). En fait c'est la norme du "gradient" de Z sur ton triangle. En gros, imagine que tu regardes ton triangle a partir de l'ecran (c'est le plan definit par les axes x et y) et que le vertical est defini par l'axe z, imagines maintenant que tu fais couler de l'eau sur le sommet le plus proche de toi de ton triangle que t'es en train de rendre. Bein cette eau va couler dans une certaine direction a une certaine vitesse. Bein Dz represente cette vitesse

    En gros, plus ton triangle va etre parallele a l'ecran, plus DZ sera petit, plus il sera perpendiculaire, plus DZ sera grand.

    Ceci est du au fait que si tu dessines des triangles paralleles entre eux qui ont une certaine distance d, si ils sont paralleles au plan ecran, la difference en z sera egale a d mais des que tu bouges la camera et qu'ils deviennent obliques, la difference en z sera toujours superieure a d. Et toi tu veux simuler ca, d'ou le factor (mets-le a 0 et tu verras que tes triangles auront beaucoup plus de z fighting quand ils seront tres obliques par rapport a la camera...).

    Je ne suis pas sur a 100% de mes dires donc a prendre avec des pincettes mes je pense etre pas loin de la verite...

    Source possible pour confirmation (en anglais):

    http://profs.sci.univr.it/~colombar/...depth_020.html
    Je ne réponds à aucune question par MP, posez vos questions sur le forum adéquat.
    Profils : G+ - LinkedIn

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Donc pour en revenir aux valeurs qu'il faut utiliser, je pense que 1, 1 ( ou -1 ) dont les meilleurs à utiliser. Car d'après l'explication de TanEk ( je pense qu'elle est juste ( du moins plus que la mienne )), DZ donne une indication sur l'inclinaison par rapport à la caméra de notre polygone. Si nous mettions zero, nous enléverions cette indication, du coup, pour l'affichage de contour, une partie serait caché, selon l'angle de la caméra.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre actif Avatar de Robxley
    Homme Profil pro
    Docteur ingénieur traitement d'image
    Inscrit en
    Mai 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Docteur ingénieur traitement d'image

    Informations forums :
    Inscription : Mai 2009
    Messages : 158
    Points : 228
    Points
    228
    Par défaut
    Bonjour,

    Réponse un peu tardive de ma part mais la faute au we long.

    Pour ce qui était du r, c'est bien l'idée que je m'en faisait principe même de l'offset de base.

    Concernant DZ merci pour toutes ces explications, c'est nettement plus claire.

    Ca vaut même que je mette mon poste en résolue

    Encore merci pour vos réponses.
    Rien ne sert de courir, mieux vaut partir à point. Programmer aussi d'ailleurs.
    Surtout, mais surtout pas d’astuces !
    Pas de bras, pas de chocolat. Les deux mains sur le clavier.

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

Discussions similaires

  1. Précision sur Oracle 9iAS r2
    Par Patmane dans le forum Oracle
    Réponses: 9
    Dernier message: 18/03/2007, 04h41
  2. Précisions sur l'Override
    Par WebPac dans le forum Langage
    Réponses: 7
    Dernier message: 26/10/2004, 08h09
  3. Précisions sur Import/export
    Par electro dans le forum Import/Export
    Réponses: 9
    Dernier message: 15/10/2004, 13h34
  4. [Observateur] Précisions sur le design pattern Observer [UML]
    Par joquetino dans le forum Design Patterns
    Réponses: 2
    Dernier message: 07/10/2004, 22h35
  5. Précision sur les sauvegarde à chaud
    Par alxkid dans le forum Administration
    Réponses: 2
    Dernier message: 09/08/2004, 18h55

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