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 :

[OpenGL/GLSL] Texture - Transparence non voulu


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Par défaut [OpenGL/GLSL] Texture - Transparence non voulu
    Alors voilà j'ai fait un cube avec application d'une texture mais je vois parfois (voir souvent à travers le cube sans pour autant voir le fond de la scène.
    Je joins deux images pour illustrer mes propos.

    Vous pensez que cela vient de quoi exactement ? Si besoin je mettrais du code.

  2. #2
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    Salut à toi, alors enfaite il n'est pas question de transparence, quand tu dessine tes triangles, tu dois donner tes vertex dans un sens précis (celui des aiguilles d'une montre). Sinon ton triangle n'est pas affiché. Ce qu'il se passe dans ton cas c'est que certains points de tes triangles sont données dans le sens inverse des aiguilles d'une montre donc tu vois les faces internes de ton cube. Pour remédier à cela tu dois inverser les vertex quand tu les stockent où quand tu les affichent. De cette façon seuls les faces externes de ton cube seront affichées et tu n'auras pas cet effet bizarre. Si tu ne comprend pas mon explication, donne ton code pour afficher le cube et je te montrerais

  3. #3
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Par défaut
    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
     
    GLfloat vertices[72] = {
          -1.0f, -1.0f,  1.0f, /* Begin Front Face */
          1.0f, -1.0f,  1.0f,
          1.0f,  1.0f,  1.0f,
          -1.0f,  1.0f,  1.0f, /* End Front Face */
          -1.0f, -1.0f, -1.0f, /* Begin Back Face */
          -1.0f,  1.0f, -1.0f,
          1.0f,  1.0f, -1.0f,
          1.0f, -1.0f, -1.0f,   /* End Back Face */
          -1.0f,  1.0f, -1.0f,  /* Begin Top Face */
          -1.0f,  1.0f,  1.0f,
          1.0f,  1.0f,  1.0f,
          1.0f,  1.0f, -1.0f,   /* End Top Face */
          -1.0f, -1.0f, -1.0f,  /* Begin Bottom Face */
          1.0f, -1.0f, -1.0f,
          1.0f, -1.0f,  1.0f,
          -1.0f, -1.0f, 1.0f,  /* End Bottom Face */
          1.0f, -1.0f, -1.0f,   /* Begin Right Face */
          1.0f,  1.0f, -1.0f,
          1.0f,  1.0f, 1.0f,
          1.0f, -1.0f,  1.0f,   /* End Right Face */
          -1.0f, -1.0f, -1.0f,  /* Begin Left Face */
          -1.0f, -1.0f,  1.0f,
          -1.0f,  1.0f,  1.0f,
          -1.0f,  1.0f, -1.0f   /* End Left Face */
       };
     
       GLuint indices[36] = {
          0, 1, 2,
          2, 3, 0,
          4, 5, 6,
          6, 7, 4,
          8, 9, 10,
          10, 11, 8,
          12, 13, 14,
          14, 15, 12,
          16, 17, 18,
          18, 19, 16,
          20, 21, 22,
          22, 23, 20
       };
    Voilà le code des vertices et des indices.

  4. #4
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    Alors avant de regarder le sens d'affichage de tes faces, je vais te demander de faire une petite optimisation
    Tu ne dois pas avoir autant de vertices pour dessiner un cube, dans un cube il n'y a que 8 points (un pour chaque coin pas plus, là dans ton cas tu as des doublons), tu dois associer l'indice de ces 8 points pour créer ton cube, une fois que ça c'est fait je trouverais le bon ordre de tes indices. Autre chose, quand tu affiche ton cube tu utilise quoi comme fonction d'affichage, es-tu sûr que celle-ci gère les primitives indexées (utilisant des indices) ?

  5. #5
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Par défaut
    Mon cube est texturé en fait :

    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
     
    GLfloat textures[48] = {
          0.0f, 0.0f,
          1.0f, 0.0f,
          1.0f, 1.0f,
          0.0f, 1.0f,
          1.0f, 0.0f,
          1.0f, 1.0f,
          0.0f, 1.0f,
          0.0f, 0.0f,
          0.0f, 1.0f,
          0.0f, 0.0f,
          1.0f, 0.0f,
          1.0f, 1.0f,
          1.0f, 1.0f,
          0.0f, 1.0f,
          0.0f, 0.0f,
          1.0f, 0.0f,
          1.0f, 0.0f,
          1.0f, 1.0f,
          0.0f, 1.0f,
          0.0f, 0.0f,
          0.0f, 0.0f,
          1.0f, 0.0f,
          1.0f, 1.0f,
          0.0f, 1.0f
       };
    Donc est ce bon ou effectivement j'ai trop de vertices ?
    Parce que je suis d'accord quand je fais un cube sans texture (je l'ai fait) je n'avais que 8 vertices dans mon VBO.

    EDIT : Pour les indices voici comment je fais : juste un bout du code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /* On active le buffer des indices */
       glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, buffers[INDICES] );
       /* Rendu de la géométrie */
       glDrawElements( GL_TRIANGLES, 36, GL_UNSIGNED_INT, 0 );

  6. #6
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Par défaut
    Tiens j'ai envie de poser une question un peu différente que tu pourras voir après.
    Je voudrais faire un peu d'éclairage mais il me faut les normales de mon cube donc faut que je calcul les normales par face (ou par vertex).

    1ère question : je fais par face ou par Vertex.
    2ème question : Comment je peux faire cela facilement => je regarde sur internet pour les compléments mathématiques mais je voudrais ton/votre avis de comment faire ça bien.

  7. #7
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    Disons qu'au lieu d'avoir une texture par face, tu peux avoir une texture "patron de cube" qui contient toutes les textures de ton cube et qui s'applique bien. Tu peux le faire via un logiciel de modélisation, mais pour un cube ça se fait bien à la main aussi. Il suffit de faire une texture qui contient les 6 textures de ton cube en forme de croix :
    Ici chaque X représente la texture d'une face, après les coordonnées de texture c'est pas bien compliqué et tu n'as besoin que de 8 points, tes coordonnées de texture c'est toujours dans l'intervalle 0.0f - 1.0f sauf que là tu as du 1.0f/4.0f et du 1.0f/3.0f fin je pense que tu vois comment ça marche sinon tu peux te renseigner en regardant du coté des "cubemap" tu trouvera vite
    Pour les lumières je ne vois pas comment tu veux donner des informations de lumière aux faces, il ne me semble pas que tu puisse passer ces informations à la carte graphique à pars avec un shader mais je ne vois pas l'intérêt tu perdrais des informations en généralisant les propriétés de lumières à tous les pixels d'une face alors qu'en donnant ces informations au pixels, la carte graphique les interpoles. Bon après c'est vrai que pour un cube c'est pas évident, car avec seulement 8 points tu ne peux définir que 8 normales hors il est vrai que pour un cube les normales des faces conviendraient pour l'afficher correctement. Si tu n'as pas peur de t'essayer en shader tu peux essayer de faire du per-pixel-lighting, c'est pas hyper compliqué et l'effet est super et ça te permettrais d'avoir un cube à 8 points ce qui est optimal. Fin moi je te conseil de faire comme ça, je suppose que tu apprends et là ça te permet d'apprendre vite et bien, vu qu'à chaque étape tu aura un rendu.

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

Discussions similaires

  1. Mix de 2 textures (non voulu)
    Par Aran-Galad dans le forum XNA/Monogame
    Réponses: 9
    Dernier message: 16/06/2008, 09h04
  2. [CSS][IE >= 5.5] Transparence non voulue !
    Par pimousse76 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 12/05/2005, 16h06
  3. probleme d'espace non voulu entre 2 bloc
    Par piff62 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 12/04/2005, 16h07
  4. Texture Transparence
    Par Cartman dans le forum DirectX
    Réponses: 1
    Dernier message: 02/03/2004, 22h02

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