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 :

contour noir pour les figures


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Points : 18
    Points
    18
    Par défaut contour noir pour les figures
    Bonjour,
    Ayant décider de nous lancer dans un projet de jeu libre avec un ami, nous avons commencé à coder notre moteur 3D. Ce que nous souhaiterions c'est faire un rendu en cel shading. Dans cette optique nous avons commencer à afficher les contours des différentes formes crée pour le jeu. Il y a cependant un petit soucis lorsque je regarde les faces de ma figure (dans le code ce sera un prisme) car les faces (numéroté 1 et 2 dans le code sources) ont des soucis d'affichage quand je les regarde(on voit une espèce de surface noir par moment). Ce problème apparait seulement lorsque la figure complète est affiché.
    J'aimerais donc savoir si quelqu'un connait ce soucis?
    Si il y a un moyen d'y remédiez?
    Si il faut (par exemple) d'abord définir les normales des différentes faces de la figure? et comment le faire?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    void eldecors::prismepente()
    {
     
        //affichage des faces de la figures!
     
        glBegin(GL_TRIANGLES);
     
        glVertex3f(m_x, m_y+m_hauteur, m_z+m_largeur);
        glVertex3f(m_x, m_y, m_z+m_largeur);
        glVertex3f(m_x, m_y, m_z);
     
        glVertex3f(m_x+m_longueur, m_y+m_hauteur, m_z+m_largeur);
        glVertex3f(m_x+m_longueur, m_y, m_z);
        glVertex3f(m_x+m_longueur, m_y, m_z+m_largeur);
     
        glEnd();
     
     
        glBegin(GL_QUADS);
     
        glVertex3f(m_x, m_y, m_z);
        glVertex3f(m_x+m_longueur, m_y, m_z);
        glVertex3f(m_x+m_longueur, m_y+m_hauteur, m_z+m_largeur);
        glVertex3f(m_x, m_y+m_hauteur, m_z+m_largeur);
     
     
        glVertex3f(m_x, m_y, m_z);
        glVertex3f(m_x, m_y, m_z+m_largeur);
        glVertex3f(m_x+m_longueur, m_y, m_z+m_largeur);
        glVertex3f(m_x+m_longueur, m_y, m_z);
     
     
        glVertex3f(m_x, m_y+m_hauteur, m_z+m_largeur);
        glVertex3f(m_x+m_longueur, m_y+m_hauteur, m_z+m_largeur);
        glVertex3f(m_x+m_longueur, m_y, m_z+m_largeur);
        glVertex3f(m_x, m_y, m_z+m_largeur);
     
     
        glEnd();
     
     
        //affichage des contours de la figure! 
     
        glEnable (GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
     
    	glPolygonMode (GL_BACK, GL_LINE);
    	glLineWidth (4.0f);
     
    	glCullFace (GL_FRONT);
     
    	glDepthFunc (GL_LEQUAL);
     
    	glColor3f (0.0f,0.0f,0.0f);
     
     
        glBegin(GL_TRIANGLES);
     
        glVertex3f(m_x, m_y+m_hauteur, m_z+m_largeur);
        glVertex3f(m_x, m_y, m_z+m_largeur);
        glVertex3f(m_x, m_y, m_z);
     
        glVertex3f(m_x+m_longueur, m_y+m_hauteur, m_z+m_largeur);
        glVertex3f(m_x+m_longueur, m_y, m_z);
        glVertex3f(m_x+m_longueur, m_y, m_z+m_largeur);
     
        glEnd();
     
     
        glBegin(GL_QUADS);
     
        glVertex3f(m_x, m_y, m_z);
        glVertex3f(m_x+m_longueur, m_y, m_z);
        glVertex3f(m_x+m_longueur, m_y+m_hauteur, m_z+m_largeur);
        glVertex3f(m_x, m_y+m_hauteur, m_z+m_largeur);
     
    //FACE 1 qui a un soucis
     
        glVertex3f(m_x, m_y, m_z);
        glVertex3f(m_x, m_y, m_z+m_largeur);
        glVertex3f(m_x+m_longueur, m_y, m_z+m_largeur);
        glVertex3f(m_x+m_longueur, m_y, m_z);
     
    // FACE 2 qui a un soucis
     
        glVertex3f(m_x, m_y+m_hauteur, m_z+m_largeur);
        glVertex3f(m_x+m_longueur, m_y+m_hauteur, m_z+m_largeur);
        glVertex3f(m_x+m_longueur, m_y, m_z+m_largeur);
        glVertex3f(m_x, m_y, m_z+m_largeur);
     
     
        glEnd();
     
     
        glDepthFunc (GL_LESS);								
     
    	glCullFace (GL_BACK);									
     
    	glPolygonMode (GL_BACK, GL_FILL);					
     
    	glDisable (GL_BLEND);
    }
    Cette fonction est appelée dans une autre fonction qui lui choisi aussi sa couleur (dans mon test, le fond de la scène était rouge ma figure blanche et les contours noir).
    Merci de l'attention porté à ma requête.

    PS : je tiens à précisez que l'on a déjà fait de l'opengl pendant un mois a la fac et qu'on se lance dans un projet comme cela en connaissance de cause ;-)

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 883
    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 883
    Points : 219 324
    Points
    219 324
    Billets dans le blog
    123
    Par défaut
    Pouvons nous voir une capture ecran du problème s'il vous plait?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    Je viens de les ajouter. Dans le OK.jpg on voit les cotés qui fonctionnent et dans pas_OK on voit les problèmes d'affichage des deux autres faces.
    Images attachées Images attachées   

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 883
    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 883
    Points : 219 324
    Points
    219 324
    Billets dans le blog
    123
    Par défaut
    Ok... merci beaucoup.

    Si je comprend bien, vous faites une première fois le dessin et puis vous le redessiner , le même mais en un peu plus gros ( pour les contours ). Quoique , j'ai pas remarqué ça dans le code.
    Enfin, c'est pas très grave, car je vais tout chamboulé. ( Je m'en excuse, mais j'ai la réponse ).
    Pour faire du contour, sure et pas cher, il y a une méthode bien précise.
    La voici en algo
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // Demande du dessin en entier ( face pleine ).
    Dessin de l'objet
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); // Demande du dessin en fil de fer.
    glPolygonOffset(1,1);
    Dessin de l'objet ( pareille qu'avant ).
    Et voilà, ça devrait bien marché. Si vous cherchez plus de précision, il faut cherche un exemple ( je crois avec le livre bleu d'OpenGL ) sur glPolygonOffset().

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    Réussi!
    En fait c'est le même principe que j'ai utilisé avec quelques options de blending en plus rien de bien méchant. cependant je ne sais pas quel était le problème car j'ai copier collé mon code et là magie ça à fonctionné...
    Donc ça reste pour moi assez bizarre... Sinon j'ai essayer le glPolygonOffset() mais je ne comprend pas trop son utilité.
    Enfin je te remercie quand même de m'avoir aidé et j'espère que j'aurais plus d'erreur comme ça ;-).

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 883
    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 883
    Points : 219 324
    Points
    219 324
    Billets dans le blog
    123
    Par défaut
    Pour le glPolygonOffset, je vous conseille de regarder les tutos sur le net. C'est juste que lorsque l'on trace des lignes aux même emplacement que les autres objets ( donc les contour ) selon le point de vue, les lignes sont plus ou moins bien retranscrite ( cela s'explique car la position pour deux points différents est la même ). Du coup, le polygonOffset va faire un changement ( virtuel ) de profondeur afin d'éviter ce problème.

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

Discussions similaires

  1. Package pour les figures de rotations
    Par DorianD dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 0
    Dernier message: 27/12/2012, 17h56
  2. [Débutant] Snake (contour actif) pour les images
    Par ikrame dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/01/2011, 11h33
  3. Comprendre la marée noire pour les nuls
    Par hegros dans le forum Écologie
    Réponses: 0
    Dernier message: 18/06/2010, 22h37
  4. Souci pour les figures lors de changement d'éditeur
    Par dragees dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 10
    Dernier message: 19/03/2010, 14h18
  5. Erreur Underfull hbox pour les figures
    Par xavhawk dans le forum Erreurs - Avertissements
    Réponses: 7
    Dernier message: 10/08/2007, 18h25

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