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 :

une texture trouée


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut une texture trouée
    Bonjour,
    J'ai cherché sur developpez.com comment trouer une texture. J'ai trouvé une explication ici http://jeux.developpez.com/faq/3d/?p...IQUES_tex_trou.

    J'ai compris le principe mais je sais pas comment l'appliquer sachant que j'utilise des textures png.
    Alors comment choisir des pixels précis dans une texture png pour changer l'alphatest?
    Si quelqun a un exemple de code, il sera le bienvenu. Merci.

  2. #2
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    salut

    il y a plein de façon de le faire: que veux tu faire exactement ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut
    Citation Envoyé par acx01b Voir le message
    salut

    il y a plein de façon de le faire: que veux tu faire exactement ?
    J'ai un mur texturé, je veux le trouer en un ensemble de portes et de fenêtres.
    Voilà.

  4. #4
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    salut,

    je dirais que tu peux tout à fait utiliser le stencil test:


    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
     
    ici tu dessines ce que tu veux
    glClearStencil(0); // on mettra 0 partout dans le stencil buffer
    glClear(GL_STENCIL_BUFFER_BIT); // mettre 0 partout dans le stencil buffer
    glEnable(GL_STENCIL_TEST); // activer le stencil test
    glStencilFunc(GL_ALWAYS,1,0xff); // test toujours vrai, valeur 1, masque 255
    glStencilOp(GL_REPLACE,GL_REPLACE,GL_REPLACE); // toujours remplacer par valeur ( = 1 )
    glDepthMask(0); // ne pas écrire dans le depth buffer
    glColorMask(0,0,0,0); // ne pas écrire dans le color buffer
    ici tu dessines un quad à l'emplacement de la porte, un autre à l'emplacement de la fenetre ...
    glColorMask(1,1,1,1); // écrire dans le color buffer
    glDepthMask(1); // écrire dans le depth buffer
    glStencilFunc(GL_EQUAL,0,0xff); // test: si égal à 0
    ici tu dessines ton mur texturé, qui sera troué par tes portes et fenetres
    glDisable(GL_STENCIL_TEST); // désactiver le stencil test
    ici tu dessines ce que tu veux
    le problème de cette technique c'est pour les barreaux de la fenetre: ta fenetre n'est plus un quad, c'est un quad avec au milieu des barreaux, et donc il faut par exemple utiliser en plus l'alpha test avec une texture qui contient les positions des barreaux

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut
    Merci acx01b.
    J'ai utilisé ton code comme suit : un grand quad (le mur) et un petit quad (la fenêtre):
    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
     
     
    		gl.glClearStencil(0); // on mettra 0 partout dans le stencil buffer
    		gl.glClear(GL.GL_STENCIL_BUFFER_BIT); // mettre 0 partout dans le stencil buffer
    		gl.glEnable(GL.GL_STENCIL_TEST); // activer le stencil test
    		gl.glStencilFunc(GL.GL_ALWAYS,1,0xff); // test toujours vrai, valeur 1, masque 255
    		gl.glStencilOp(GL.GL_REPLACE,GL.GL_REPLACE,GL.GL_REPLACE); // toujours remplacer par valeur ( = 1 )
    		gl.glDepthMask(false); // ne pas écrire dans le depth buffer
    		gl.glColorMask(false,false,false,false); // ne pas écrire dans le color buffer
    		//ici tu dessines un quad à l'emplacement de la porte, un autre à l'emplacement de la fenetre ...
     
    					// Select Texture 1 (0)
    		 gl.glBegin(GL.GL_QUADS);
    		 gl.glNormal3f( 0.0f, 0.0f, 1.0f);
    		 gl.glColor4f(0, 0, 0, 0.5f);
             gl.glVertex3f(-0.3f, -0.3f,  0.3f);
             gl.glVertex3f( 0.3f, -0.3f,  0.3f);
             gl.glVertex3f( 0.3f,  0.3f,  0.3f);
             gl.glVertex3f(-0.3f,  0.3f,  0.3f);
             gl.glEnd();
     
    		gl.glColorMask(true,true,true,true); // écrire dans le color buffer
    		gl.glDepthMask(true); // écrire dans le depth buffer
    		gl.glStencilFunc(GL.GL_EQUAL,0,0xff); // test: si égal à 0
     
    		//ici tu dessines ton mur texturé, qui sera troué par tes portes et fenetres
    		gl.glBindTexture(GL.GL_TEXTURE_2D, SkyTexture);
    		gl.glBegin(GL.GL_QUADS);
     
     
    	         gl.glNormal3f( 0.0f, 0.0f, 1.0f);
    	         gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f,  1.0f);
    	         gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f,  1.0f);
    	         gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f,  1.0f,  1.0f);
    	         gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f,  1.0f,  1.0f);
    	         gl.glEnd();
     
     
     
    		gl.glDisable(GL.GL_STENCIL_TEST); // désactiver le stencil test
    Mais j'obtiens pas un trou dans le grand quad.

  6. #6
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    hello t'es en java ?
    avec SDL en C il faut dire le nombre de bits (= 8) alloués pour le stencil buffer

    apparement selon
    http://74.125.39.104/search?q=cache:...lnk&cd=1&gl=fr


    il faut faire ça:
    GLCapabilities glCapabilities = new GLCapabilities();
    glCapabilities.setStencilBits(1); // heu plutôt 8 ?
    GLDrawableFactory.getFactory().createGLCanvas(glCapabilities);

    (j'ai tapé gl.glEnable(GL.GL_STENCIL_TEST); dans google)

Discussions similaires

  1. Color key d'une texture
    Par Freakazoid dans le forum DirectX
    Réponses: 9
    Dernier message: 07/07/2004, 17h48
  2. comment modifier une texture?
    Par tibyann dans le forum DirectX
    Réponses: 6
    Dernier message: 16/06/2004, 16h27
  3. Charger 16x16 sur une texture 256x256
    Par Johngame dans le forum DirectX
    Réponses: 4
    Dernier message: 06/03/2004, 18h16
  4. Chargement d'une texture a partir de la mémoire
    Par logramme dans le forum DirectX
    Réponses: 6
    Dernier message: 27/01/2003, 15h57
  5. Changer l'image d'une texture
    Par alltech dans le forum DirectX
    Réponses: 5
    Dernier message: 21/08/2002, 02h31

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