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 :

Multi texture dans avec les VBO


Sujet :

OpenGL

  1. #1
    Membre habitué
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Points : 127
    Points
    127
    Par défaut Multi texture dans avec les VBO
    bonjour, je me suis lancer dans l'idée d'exploiter les VBOs dans mes programme en OpenGL histoire de voir.
    tout c'est bien passer c'est cool, ça marche, j'ai bien mon cube texturer/normaliser/colorer qui apparait sur ma scène
    mais je me suis poser une question qui peut paraitre conne au premier abord.
    comment faire pour appliquer plusieurs texture différente avec des VBO,
    faut-il que je crée une meta-texture, ou y a t-il d'autre méthode ?

    car pour info/aide mémoire/référence, l'affichage se fait tout d'un bloc par l'appel soit de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void glDrawArrays( GLenum mode, GLint first, GLsizei count);
    soit de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
    si on utilise des index.

    voila
    i = i++;

  2. #2
    Membre habitué
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Points : 127
    Points
    127
    Par défaut
    personne ne fait de VBO avec des textures ???
    i = i++;

  3. #3
    Membre habitué
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Points : 127
    Points
    127
    Par défaut
    c'est une question qui fâche peut être ?
    i = i++;

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Points : 1 630
    Points
    1 630
    Par défaut
    Tu as deux possibilités :
    • tu crées une texture contenant toutes les textures utilisées par ton maillage
    • tu fais un vbo pour chaque géométrie


    Il va de soit que la première solution est la meilleure mais un tout petit peu plus compliquée.
    Je ne réponds à aucune question par MP, posez vos questions sur le forum adéquat.
    Profils : G+ - LinkedIn

  5. #5
    Membre habitué
    Avatar de yvesall
    Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2006
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 208
    Points : 127
    Points
    127
    Par défaut
    merci bien TanEk
    i = i++;

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 109
    Points : 121
    Points
    121
    Par défaut VBO ca ROX
    Bonjour,

    Sisi on les utilise et c'est pas mal efficace compare à un minable glBegin()/ glEnd().
    Voici par exemple comment appliquer un multitexturing sur un terrain :

    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
     
     
    #define BUFFER_OFFSET(a) ((char*)NULL + (a))
     
        // On lie les différentes textures
        // Texture de base
        glClientActiveTexture(GL_TEXTURE0);
        glBindBuffer(GL_ARRAY_BUFFER, /* ton adresse VBOhandle de map de base*/);
        glTexCoordPointer(2,GL_FLOAT,0,BUFFER_OFFSET(0));
        glActiveTexture(GL_TEXTURE0);
     
        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
        glBindTexture( GL_TEXTURE_2D, /* ta texture de base */);
        glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE);
     
        // Detail map
        glClientActiveTexture(GL_TEXTURE1);
        glBindBuffer(GL_ARRAY_BUFFER, /* ton adresse VBOhandle de ta detail map */);
        glTexCoordPointer(2,GL_FLOAT,0,BUFFER_OFFSET(0));
        glActiveTexture(GL_TEXTURE1);
        glEnable( GL_TEXTURE_2D );
        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
     
     
       /* Tu mets ton glDrawArrays ici */
     
        glDisableClientState(GL_VERTEX_ARRAY);
        glDisableClientState(GL_COLOR_ARRAY);
     
        glClientActiveTexture(GL_TEXTURE1);
        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
        glActiveTexture(GL_TEXTURE1);
        glDisable( GL_TEXTURE_2D );
     
        glClientActiveTexture(GL_TEXTURE0);
        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
        glActiveTexture(GL_TEXTURE0);
     
        glBindBuffer(GL_ARRAY_BUFFER,0);

    C'est très proche des vertex arrays comme tu peux le voir.
    Seulement attention, tu dois faire glEnable(GL_TEXTURE_2D) à chaque fois que tu appliques une texture, sinon ca ne marche pas.
    (Dans l'exemple, la texture 0 est autorisée par défaut en fait)
    Tu dois aussi faire glEnableClientState(GL_TEXTURE_COORD_ARRAY) à chaque fois sinon ca ne marche pas (ou ça te fait un terrain fluo lol ou truc du genre).
    le Buffer_Offset sert à indiquer où openGL doit commencer à lire dans tes tableaux. C'est toujours zéro si tu fais un VBO par tableau.
    Je te conseille de bien préciser le glBindBuffer(GL_ARRAY_BUFFER,0) à la fin.

    Avec un détail map à *4, j'ai déjà de bons résultats jusqu'a une map 2048*2048 sachant que ke j'utilise une texture de 512*512 de base et une autre de 512*512 pour la detail map.
    Apres je passe à *8 pour un 4096*4096.

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

Discussions similaires

  1. [OpenGL 3.x] [JOGL] Problème de multi-thread avec les VBO
    Par darksamus1 dans le forum OpenGL
    Réponses: 4
    Dernier message: 02/07/2013, 12h47
  2. Suite de cercles avec les VBO
    Par GLDavid dans le forum OpenGL
    Réponses: 3
    Dernier message: 15/07/2009, 11h53
  3. Pas d'affichage avec les VBO
    Par GLDavid dans le forum OpenGL
    Réponses: 2
    Dernier message: 15/06/2009, 16h55
  4. Rendu étrange avec les VBOs! Besoin d'aide
    Par kaliban dans le forum OpenGL
    Réponses: 11
    Dernier message: 06/09/2007, 00h09
  5. [Multi-threading] Probleme avec les mutex
    Par homeostasie dans le forum Visual C++
    Réponses: 2
    Dernier message: 07/03/2007, 10h00

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