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 de multi textures


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Problème de multi textures
    Bonjour, je développe une petite api pour Android et je touche depuis peu à OpenGl.
    Je voulais vous poser la question suivante qui commence un peu a me faire tourner fou.

    Je vous présente le probleme dans son contexte, je pense pas besoin du code, il est facilement compréhensible.

    Alors, j'ai ma classe cube qui contient LoadTexture()
    cette methode instancie une classe qui contient un créateur de bitmap a partir de layout, et renvoie donc un bmp a LoadTexture.
    , lorsque je créé x objet de cette classe Cube dans mon renderer, et que j'appelle pour chaque objet de cette classe
    Cube cube1, cube2 cube3.... .LoadTexture(int resource de layout);
    Je me retrouve avec plusieurs cubes partageant la même texture, même si j'ai chargé plusieurs textures différentes.


    je sais que je dois utiliser glBindTexture avec les id donnés par glGenTextures
    Mais je ne sais pas quand appeler ce glBind et pouvoir switcher de textures, en sachant que je définis les resources a utiliser dans le renderer.
    C'est le même probleme en pire si je veux que chaque faces de mon Cube ait une texture différente mais je verrai ca plus tard.

    Voilà, si quelqu'un pouvait m'aider a bien gérer ce probleme et pouvoir differencier les textures dans mon renderer pour chaque objet de la meme classe je lui en serait infiniment reconnaissant.
    En précisant que je suis novice et j'ai pas fais école d'info alors je suis très content quand je bénéficie d'explications pédagogiques voire claires .

    Merci beaucoup de votre attention chers développeurs

    je quote quand meme un bout de mon code, ici mon loadTexture de (Cube)

    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
     
       void loadTexture(GL10 gl, Context context, int resource[]) {
     
    	   for (int i=0; i<resource.length; i++ ){
    // ca c'est ma classe qui me créé des bmp avec des layout
    	   CreateBitmapFromLayout createBitmapFromLayout=new CreateBitmapFromLayout(context);
    	   Bitmap bmp1=createBitmapFromLayout.findMonLayout2(context, resource[i]);
     	   gl.glGenTextures(1, texture, i);
     
    //	   gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[i]); ????
     
    	   GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp1, 0);
    	   gl.glTexParameterx(GL10.GL_TEXTURE_2D,  GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
    	   gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
    	   bmp1.recycle();
    }
    }

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 219
    Points : 239
    Points
    239
    Par défaut
    Bonsoir Moldix,

    [clavier US]

    Permet moi de t'expliquer la philosophie (qui a dit discutable ? ) du "bind to modify" d'OpenGL.

    Dans un context OpenGL, tu peux charger N textures, mais seulement une seul peut etre activee a la foit. C'est faut ce que je dit, mais j'exclue le multi texturing, direct state access et bindless texturing pour que tu comprennes la fonctionnalitees de base des textures dans les vielles versions d'OpenGL et ainsi faire fonctionner ton application.

    La philosophie du "bind to modify" est comme sont nom l'indique, de activee la texture pour ensuite la modifier. En effet, tu remarque dans tes appels :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp1, 0);
    gl.glTexParameterx(GL10.GL_TEXTURE_2D,  GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
    gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
    Que tu ne specifies pas la texture sur laquel tu apportes des modifications. C'est la qu'intervien la necessitee de decommenter gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[i]); juste avant, qui permet de dire au driver : "Vouala, je considere la texture[i] pour les modifications avenir".

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    gl.bindTexture(GL10.GL_TEXTURE_2D, texture[1]);
    // je modifie la texture 1
     
    gl.bindTexture(GL10.GL_TEXTURE_2D, texture[2]);
    // je modifie la texture 2
     
    gl.bindTexture(GL10.GL_TEXTURE_2D, texture[1]);
    // je re-modifie la texture 1
    Ensuite au moment du rendu de chaque cube, il te suffura de activer la texture a l'aide de cette meme derniere commande juste avant le gl.draw{Array,Elements,...}(...) pour aussi dire simplement au driver : "Vouala je considere maintenant cette texture pour les rendus avenir".

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    gl.bindTexture(GL10.GL_TEXTURE_2D, texture[1]);
    drawCube(1); // dessine avec la texture 1
    drawCube(4); // dessine avec la texture 1
     
    gl.bindTexture(GL10.GL_TEXTURE_2D, texture[2]);
    drawCube(3); // dessine avec la texture 2
     
    gl.bindTexture(GL10.GL_TEXTURE_2D, texture[3]);
    drawCube(2); // dessine avec la texture 3
     
    // ainsi de suite ...
    En esperant t'avoir fait comprendre ...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Très interessant, et surtout efficace. Merci Bien, je ne vois rien d'autre a ajouter.

    Résolu.

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

Discussions similaires

  1. Problème étrange - shader multi texturing
    Par Awakening dans le forum OpenGL
    Réponses: 1
    Dernier message: 20/12/2011, 18h08
  2. Problème FBO rendu multi textures offscreen
    Par Cytior dans le forum OpenGL
    Réponses: 10
    Dernier message: 27/04/2011, 14h40
  3. [libjpeg && opengl] problème "multi-texturing"
    Par pspflashsystem dans le forum OpenGL
    Réponses: 4
    Dernier message: 23/02/2009, 13h01
  4. Problème Requete Multi Jointure + Like
    Par thefutureisnow dans le forum Langage SQL
    Réponses: 27
    Dernier message: 06/01/2006, 15h50
  5. Problème Requete Multi Jointure + Like
    Par thefutureisnow dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/01/2006, 19h39

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