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 :

Deux textures pour deux objets. Multitexturing ? [OpenGL 4.x]


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Deux textures pour deux objets. Multitexturing ?
    Bonjour à tous.

    Je veux appliquer deux textures diffèrentes, chacune sur deux objets séparés (sol & murs).
    Voilà comment je tente l'initialisation (surfsol et surfmur sont des surfaces SDL chargées des deux images.) :

    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
    static GLuint texID[2];
    glGenTextures(2,texID);
     
    glActiveTexture(GL_TEXTURE0);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D,texID[0]);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_FASTEST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexImage2D(GL_TEXTURE_2D,0,OctetsParPixel,4096,4096,0,GL_BGR,GL_UNSIGNED_BYTE,surfsol->pixels);
     
    glActiveTexture(GL_TEXTURE1);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D,texID[1]);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_FASTEST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexImage2D(GL_TEXTURE_2D,0,OctetsParPixel,1024,1024,0,GL_BGR,GL_UNSIGNED_BYTE,surfmur->pixels);

    Ensuite, au rendu, je tente de basculer sur l'une, puis l'autre texture :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      glActiveTexture(GL_TEXTURE1);
      glBindTexture(GL_TEXTURE_2D,texID[1]);
    (affiche mesh murs)
      glActiveTexture(GL_TEXTURE0);
      glBindTexture(GL_TEXTURE_2D,texID[0]);
    (affiche mesh sol)
    Et ça marche pô. Quoique je tente, sol et murs sont habillés de la texture0. Par contre, ça fonctionne en précédent l'affichage de chaque mesh du glTexImage2D() correspondant. Mais ça rame grave : Pas la bonne méthode.

    Merci de votre aide.

  2. #2
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Salut!

    Non, le multitexturing n'est pas fait pour ça. Il est utilisé pour activer plusieurs textures pour 1 draw call (comme par exemple pour le normal mapping).
    Toi il te faut un simple texturing de base.

    A l'initialisation, tu peux très bien configurer les 2 textures en utilisant la même unité (utilisation de GL_TEXTURE0 au lieu de GL_TEXTURE1).
    A l'utilisation, tu bind alors la texture qui va bien, sur l'unité GL_TEXTURE0.

    EDIT:

    Et en OpenGL 4.0 tu as accès aux sampler objects qui sont plutôt pratiques.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Salut dragonjoker59, et grand merci de m'avoir débloqué.

    En effet, ça marche nickel en supprimant juste les glActiveTexture() et quelques glEnable(GL_TEXTURE_2D) excédentaires.
    Je peux passer à la phase suvante (skybox).
    Je n'oublie pas ton conseil concernant les sampler objects.
    Encore merci et à bientôt.

    Bon code.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/10/2013, 17h49
  2. Réponses: 1
    Dernier message: 04/08/2011, 11h11
  3. Pré-requis pour deux workspaces sur deux server distincts?
    Par xav2229 dans le forum Administration et Installation
    Réponses: 1
    Dernier message: 22/01/2011, 10h01
  4. [MCD] Deux relations pour deux entités
    Par glen1789 dans le forum Schéma
    Réponses: 3
    Dernier message: 04/11/2009, 00h07
  5. Deux submits pour deux pages différentes
    Par ceaser dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 19/07/2007, 23h34

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