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 :

Multipass Triangle strip + triangle list


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Multipass Triangle strip + triangle list
    Salut,

    Je fais un rendu en multipass avec en 1ere pass une version triangle strip d'un modéle et en 2e pass une version triangle list de ce même modèle. Les vertex buffers sont identiques, les transformations aussi mais j'obtiens toujours du z fight. Par contre si je passe ma 1ere pass en triangle list, il n'y a plus de z fight. Est-ce normal qu'on ne puisse pas mixer strip et list ?

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Tu cherches à faire quoi avec ton multipass ?
    normalement dans un rendu multipass tu fais un 2 rendus avec la même méthode sinon c'est sûr tu peux te retrouver avec des différences (il suffit de 0.000001 de différence...)
    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.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    En fait c'est pour les shadow volumes, je veux rendre le modèle "visible" avec des strips pour que ce soit plus rapide, mais le front cap du shadow volume lui est rendu avec une triangle list. J'ai vérifié les positions des vertices dans les 2 vertex buffers, elles sont identiques au bit près, et pour la transformation des vertices, les 2 passes par un vertex shader qui effectuent exactement la même transformation, à savoir :

    Output.Position = mul( mModelViewProj, Input.Position );

    Je ne pense pas que cela vienne du fait d'utiliser 2 shaders différents, mais plutôt du mix strip/list. Comme je l'ai déjà dit, si ma première pass est en triangle list, pas de z fight. J'ai recherché un peu et j'ai trouvé quelqu'un sur un autre forum qui a eu le même problème. Je vais faire des lists, tant pis...

  4. #4
    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
    si si, le probleme vient bien de l'utilisation des shaders...

    en fait quand tu effectue des transformation dans un shaders, rien ne garanti que pour la même matrice, avec le même vecteur, tu aura le même resultat entre un shader et le piplie de rendu normal.

    pour resoudre ce probleme, il existe l'option ARB_invariant dans les vertex program (je ne sait pas comment faire avec un shader mais ca doit aussi exister), qui permet de faire d'abors passer le vertex par le pipeline normal, puis ensuite l'envoie au vertex program avec l'ensemble des transformations effectuée...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Je suis d'accord, on ne peut pas utiliser le pipeline fixe et un shader pour du multipass, mais dans mon cas je n'utilise pas le pipeline fixe, mais 2 shaders, un pour chaque pass. Je me répète encore , les 2 shaders effectuent la même transformation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    pass 1      pass 2
    shader 1    shader 2
     
    strip       tri list    -> z fight
     
    tri list    tri list    -> pas de z fight
    je vais essayer en TnL pour voir si ça fait la même chose.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    En utilisant le TnL pour les 2 passes, ça z fight aussi, donc mix strip/list impossible...

  7. #7
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par El Brujo
    En utilisant le TnL pour les 2 passes, ça z fight aussi, donc mix strip/list impossible...
    Est-ce tu dessines les triangles dans le même ordre pour les strips et les lists?

    Est-ce que les vertex de chaque triangle sont spécifiés dans le même ordre pour les strips et les list?

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par gybe
    Est-ce que les vertex de chaque triangle sont spécifiés dans le même ordre pour les strips et les list?
    Non puisque les méthodes de dessin d'un strip et d'une liste sont totalement différentes
    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.

  9. #9
    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
    c'est typiquement un probleme d'invariance openGL... en effet rien ne garantie que 2 methodes de rendu sur les mêmes donnée donnent le même resultat...
    une petite recherche sur google avec invariance et openGL donne quelques liens utilies a ce propos
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par shenron666
    Citation Envoyé par gybe
    Est-ce que les vertex de chaque triangle sont spécifiés dans le même ordre pour les strips et les list?
    Non puisque les méthodes de dessin d'un strip et d'une liste sont totalement différentes
    : tu peux dessiner les vertex des triangle list dans le même ordre que les vertex de n'importe quel triangle strip

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par gybe
    : tu peux dessiner les vertex des triangle list dans le même ordre que les vertex de n'importe quel triangle strip
    Dans ce cas dis moi comment tu fais parceque je ne vois pas comment tu peux transférer de la même façon 2 triangles par exemple :
    - en strip : 4 vertex
    - en liste : 6 vertex

    il y a pas une différence là ?
    d'où la différence, c'est géré différemment par opengl afin d'optimiser le strip (sinon je vois pas l'intérêt)
    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.

  12. #12
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 85
    Points
    85
    Par défaut
    mon commentaire n'était peut-être pas clair.

    Si par exemple tu dessines 2 triangles avec des triangles strip. Mettons que les 4 vertex utilisés sont dans l'ordre les vertex A, B, C et D. Les 2 triangle seront composé des vertex A, B, C et B, C, D. Maintenant, si tu veux dessiner les mêmes triangles en triangle list en spécifiant les vertex dans le même ordre, tu devras envoyer (dans l'ordre) les vertex A, B, C, B, C, D. De cette façon, il est "peut-être" possible que les 2 triangles soient calculés exactement de la même façon par le GPU en strip ou en list.

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Je vois ce que tu veux dire, c'est vrai que dans ce cas on peux se poser des questions sur le fait que le rendu est différent
    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.

  14. #14
    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
    c'est justement ce dont je parlais : probleme d'invariance...
    la norme openGL n'assure en aucun cas que 2 methode de rendu differentes sur les même donnée donnent le même resultat...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

Discussions similaires

  1. Cube en triangle strip
    Par goast dans le forum OpenGL
    Réponses: 7
    Dernier message: 18/07/2008, 16h11
  2. recherche principe anti-aliasing triangle strip
    Par luckydigit dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 01/07/2008, 19h16
  3. Mesh en Triangle Strip
    Par yagero dans le forum DirectX
    Réponses: 5
    Dernier message: 10/01/2008, 16h39
  4. Création vertex pour affichage en Triangle Strips
    Par ReiKiss dans le forum DirectX
    Réponses: 2
    Dernier message: 09/11/2005, 10h31
  5. [3D] Triangles
    Par Frederic dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 08/11/2002, 23h01

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