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 :

tracé d'un contour


Sujet :

OpenGL

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Points : 139
    Points
    139
    Par défaut tracé d'un contour
    Bonjour.
    Je veux faire des volumes shadows et j'ai pour cela jeté un coup d'œil au (bon !) tutorial de Nehe.

    Tout revient donc à connaître les points qui forment la limite surface éclairée/surface non éclairée et ensuite à extruder le contour qu'ils forment, en quelque sorte (en fait dessiner un tronc de pyramide de sommet la lumière et de base le contour)

    C'est là qu'est mon problème: D
    ans le tableau de points qui constituent mon objet 3D, j'ai un tag contour qui me dit si le point appartient au contour ou non.
    Seulement, il faut tracer le contour dans le bon ordre, avec un sens bien défini (il ya l'astuce du culling).

    Mon problème revient donc à quelque chose d'assz géométrique: Etant donné des points qui forment un contour autour d'un axe connu (ici, l'axe lumière-barycentre des points), mais donnés totalement dans le désordre, comment tracer ce contour dans un sens précis ?

    J'ai pensé que je pourrais m'en sortir avec le signe et/ou la croissance de certains produit scalaires et vectoriels mais ça semble compliqué, alors qu'il ya peut -être une méthode plus simple....
    MacBook - MacOS X.5.4
    C, Objective-C
    OpenGL, GLUT, Cocoa

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Normalement pas besoin de tracer le contour dans l'ordre, suffit que tes arêtes extrudées soient dans le bon sens (ie. si ce n'est pas le cas il suffit d'inverser les deux extrémités).

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Points : 139
    Points
    139
    Par défaut
    Ben il faut quand même savoir entre quels et quels points tracer les arêtes, ce qui revient à savoir quel point en suit un autre et donc, du coup à trouver le contour, nan ?

    Ou alors faire le bourrin et tracer toutes les aretes possibles mais c'est ardu
    MacBook - MacOS X.5.4
    C, Objective-C
    OpenGL, GLUT, Cocoa

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Pas nécessairement non. Tu obtiens à un moment une liste d'arêtes à extruder, mais inutile de chercher à trier celle-ci pour "suivre" le contour.

  5. #5
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Points : 139
    Points
    139
    Par défaut
    Le problème c'est que je n'ai pas fait exactement comme le tuto mais que j'ai bien les points du contour, mais pas les arêtes (les arêtes ça casait pas dans ma structure de données et ça m'avait pas l'air souple dans le cas de gouraud shading).

    Du coup c'est peut-être une mauvaise idée d'avoir procéder comme ça :s
    MacBook - MacOS X.5.4
    C, Objective-C
    OpenGL, GLUT, Cocoa

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Oui, je pense que du point de vue optimisation il vaut mieux travailler avec une liste d'arêtes et non de points.

    D'autant plus que c'est un point critique des shadow volumes, une mauvaise structure de données sera très peu performante pour la détection des arêtes.

  7. #7
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Points : 139
    Points
    139
    Par défaut
    Bon, ben je crois que je vais devoir tout changer...
    Mais comment déterminer si une face est éclairée ou non avec le gouraud ? On fait la moyenne des normales des sommets ?

    Mais sinon, en dehors des shadows volumes, d'un point de vue... culturel dirons-nous, est ce que mon problème originel est résolvable ?
    MacBook - MacOS X.5.4
    C, Objective-C
    OpenGL, GLUT, Cocoa

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Mais comment déterminer si une face est éclairée ou non avec le gouraud ? On fait la moyenne des normales des sommets ?
    Habituellement on fait les calculs par vertex et non par face.

    Mais sinon, en dehors des shadows volumes, d'un point de vue... culturel dirons-nous, est ce que mon problème originel est résolvable ?
    J'imagine que oui. D'un point de vue bourrin, suffirait de chercher l'arête dont la première extrémité est la même que la seconde de l'arête courante, et ainsi de suite pour les chaîner.

    Ca n'a pas beaucoup de rapport avec ce problème, mais tu peux faire des recherches sur le "silouhete tracking" : ça permet de contruire la silouhette incrémentalement.

  9. #9
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Points : 139
    Points
    139
    Par défaut
    Habituellement on fait les calculs par vertex et non par face.

    Mais pourtant, les arêtes qui vont lancer l'ombre sont bien définies comme celles faisant la limite entre les faces éclairées et les faces visibles, non ?

    Enfin je vois pas sur quels points tester si on fait avec les arêtes.
    C'est pour ça qu'au début, j'avais fait avec les points en regardant le nombre de points voisins d'un autre éclairés ou non pour savoir si ce point allait faire partie du contour à extruder.

    [/quote]
    MacBook - MacOS X.5.4
    C, Objective-C
    OpenGL, GLUT, Cocoa

  10. #10
    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
    generalement pour les shadow volumes, on utilise aussi une structuration du model en edges. un edge contentant tout simplement les 2 vertex des extremitée et 2 pointeur sur les 2 faces voisines ( ca oblige a avoir un volume fermé par contre ).
    avec ca tu peut tres facilement savoir quel sont les edges qui forment la silhouette, ce sont ceux qui ont un des triangles eclairé et l'autre pas... et tu recupere les vertex directement de ta structure...
    * 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

  11. #11
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Points : 139
    Points
    139
    Par défaut
    Oui oui voila, c'etait mon idée.

    Disons que j'ai déja une structure organisée en vertex et polygones, mais je pensais après la remarque de loulou24 faire une troisième structure edges qui me servira essentiellement pour caster les shadows volumes (allons y pour le franglais !!).

    Bon je pars en vacances là, je vous communiquerais peut-être les résultats de mes expérimentations

    merci à vous !
    MacBook - MacOS X.5.4
    C, Objective-C
    OpenGL, GLUT, Cocoa

  12. #12
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Points : 139
    Points
    139
    Par défaut
    J'ai implémenté cette structure d'eges et ça marche vraiment nickel.

    Seulement, je n'ai pas pu échapper à un test d'orientation pour savoir dans quel sens tracer mes quads d'extrusion et j'ai l'impression que ça génère des problèmes sur les objets qui ne sont pas assez 'ronds'....

    J'aimerais savoir si on peut s'en passer, il me semble pas l'avoir vu dans le tuto Nehe, mais je vois vraiment pas comment faire sans...
    MacBook - MacOS X.5.4
    C, Objective-C
    OpenGL, GLUT, Cocoa

  13. #13
    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
    a priori, je ne vois pas comment m'en passer, mais par contre, tu peut optimiser le rendu en affichant pas des quads mais des triangle projeté a l'infini, etant donné que cette projection infini donne quasiment le même resultat pour des triangles que pour des quads (car elle est justement infinie...)
    * 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

  14. #14
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 125
    Points : 139
    Points
    139
    Par défaut
    Oui, bon,, je recherche pas non plus le gain absolu de performance, c'etait surtout pour le principe,

    Mais si on ne peut pas se passer de ce test, quelle forme doit il prendre.

    Parce que là, je présuppose en fait que le contour forme vraiment un contour, c'est à dire que tous les points sont coplanaires et j'utilise le vecteur (barycentre des points,position de la lumière) comme vecteur de référence pour tester ensuite la projection de P1P2xP10 où P1 et P2 sont les deux points de mon edge à tester et 0 ce fameux barycentre.

    Est ce que c'est de cette méthode que peut venir le problème pour des objets à faible résolution ?
    MacBook - MacOS X.5.4
    C, Objective-C
    OpenGL, GLUT, Cocoa

Discussions similaires

  1. Tracé de contour d'objet 3D : GeometryGroup
    Par mikeycast dans le forum C#
    Réponses: 11
    Dernier message: 25/11/2012, 22h44
  2. Tracé de contours (outlining)
    Par pottiez dans le forum Contribuez
    Réponses: 0
    Dernier message: 03/01/2011, 14h47
  3. Trier des vertices pour tracé de contour
    Par Djakisback dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 12/06/2010, 13h46
  4. Tracé de contour dans des tableaux
    Par airballman dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 17/07/2009, 09h03
  5. [Kylix] contour visible d'un TextRect?
    Par skoupay dans le forum EDI
    Réponses: 1
    Dernier message: 12/03/2003, 12h00

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