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 :

Problème transparence Texture


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 4
    Par défaut Problème transparence Texture
    Bonjour a tous,

    j'ai un problème avec une texture que j essaye de rendre transparente (image avec un canal alpha).

    Ma texture est à moitié transparente partout(même où elle doit être opaque :-( )

    Voici mon code pour avoir une petite aide :

    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
     
    public void loadGLTexture(GL10 gl, Context context) {
    		//Get the texture from the Android resource directory
    		InputStream is = context.getResources().openRawResource(id_res);
    		Bitmap bitmap = null;
    		try {
    			//BitmapFactory is an Android graphics utility for images
    			bitmap = BitmapFactory.decodeStream(is);
     
    		} finally {
    			//Always clear and close
    			try {
    				is.close();
    				is = null;
    			} catch (IOException e) {
    			}
    		}
     
    		 //Generate one texture pointer...
    		gl.glGenTextures(1, textures, 0);
    		//...and bind it to our array
    		gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
     
    		//Create Nearest Filtered Texture
    		gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
    		gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
     
    		//Different possible texture parameters, e.g. GL10.GL_CLAMP_TO_EDGE
    		gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
    		gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);
     
    		//Use the Android GLUtils to specify a two-dimensional texture image from our bitmap
    		GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
    		bitmap.recycle();
    		gl.glEnable(GL10.GL_BLEND);
    	}
    Merci d avance pour votre aide ;-)

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    Pour moi la source possible du problème est le texImage2D ... mais je ne vois pas trop pourquoi.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 28
    Par défaut
    Quelle valeur utilises tu dans ta blend func ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 4
    Par défaut
    Oui j'ai un doute sur ma blendfunc mais j'ai essayé un peu tout, il me semble !!
    Enfin actuellement j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Blending Function For Translucency Based On Source Alpha Value
    		gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE);
    		gl.glEnable(GL10.GL_BLEND);

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 28
    Par défaut
    yep le blending dans openGL c'est tout sauf intuitif.

    En gros va falloir travailler sur deux plans,
    d'une part verifier ta blend func
    http://users.polytech.unice.fr/~buff...ing/slide6.htm
    d'autre part verifier si le canal alpha est bien affecté.

    J'ai peur de dire des betises alors j'arrete la. si j'ai l'occasion je fouillerai le code source que j'ai produit y'a pas mal de temps. Désolé de pas pouvoir t'aider plus que ca tout de suite.

  6. #6
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE);
    Je crois qu'on tient le problème.... là vous utilisez l'alpha de l'objet à dessiner (1er parametre) mais vous ajoutez dans tous les cas TOUTE la couleur de l'arriere plan (2eme parametre)

    Mettons que vous dessinez un triangle, là en gros vous faites: couleur finale = (alpha triangle)*(couleur triangle) + 1 * (couleur fond).

    Donc même si alpha = 1, ce qui correspondrait à une partie opaque du triangle, vous allez ajouter (couleur fond), ce qui donne l'impression que tout est transparent.

    Essayez comme celà:
    [code]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
    (couleur finale = (alpha triangle)*(couleur triangle) + (1 - alpha triangle) * (couleur fond))

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

Discussions similaires

  1. Problème transparence texture (OpenGL + Qt)
    Par killerjeff dans le forum OpenGL
    Réponses: 2
    Dernier message: 25/02/2010, 15h24
  2. Réponses: 10
    Dernier message: 08/06/2009, 11h30
  3. transparence texture
    Par ptidrone dans le forum DirectX
    Réponses: 10
    Dernier message: 09/07/2004, 17h59
  4. Problème de texture
    Par filousnt dans le forum OpenGL
    Réponses: 4
    Dernier message: 26/06/2004, 20h11
  5. pb de transparence/texture/sprite
    Par Fikus dans le forum DirectX
    Réponses: 6
    Dernier message: 15/05/2004, 22h38

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