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 :

Multiple bindtexture dans un seul VBO.


Sujet :

OpenGL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    905
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 905
    Points : 85
    Points
    85
    Par défaut Multiple bindtexture dans un seul VBO.
    Bonjour,

    Je voudrais pouvoir faire de la programmation vbo multitexturing , en appelant qu'une seule fois la fonction gldrawXXXX.

    Il y a la texture 3d (glTexImage3D et glTexSubImage3D (GL_TEXTURE_2D_ARRAY) ), mais quelles sont les limites ?

    Peux t'on mettre dans la fonction glTexSubImage3d des résolutions d'images différentes mais de multiple de 2 ???
    Quelles sont les limites ? est t'il limiter à la mémoire video ou le Z est t'il limiter ?

    Existe t'il un exemple simple C++ shader d'utilisation ?

    Je voudrais savoir aussi si le driver virtualbox supporte ceux-ci ?
    OU ALORS
    OpenGL 2.1 Chronium 1.9 supporte t'il la fonction glTexSubImage3D ?????

    Merci

  2. #2
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    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 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Euh, pour le multitexturing, tu as juste à binder tes différentes textures, et leur attribuer une variable uniforme dans ton fragment shader.
    Les texture array ou les texture 3D ne sont pas forcément pour la même chose

    EDIT :
    Un code de shader utilisant le multitexturing :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #version 430
    in	vec3 texture;
    uniform sampler2D mapDiffuse;
    uniform sampler2D mapOpacity;
    layout( location=0 ) out vec4 FragColor;
     
    void main()
    {
        vec4 l_diffuse = texture2D( mapDiffuse, texture.xy );
        float l_opacity = texture2D( mapOpacity, texture.xy ).a;
        FragColor = vec4( l_diffuse.rgb, l_opacity );
    }
    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
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    905
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 905
    Points : 85
    Points
    85
    Par défaut
    Merci beaucoup pour le shader,en Opengl je suis un novice avancer.
    mais comment definissons / bind t'on les textures les textures au niveau du code ?
    avec glBindTexture ???(je pense que c'est pas bon) , avec glTexSubImage3d (resolution d'images différentes mais de multiple de 2) ??? ou avec ACTIVE_TEXTUREX ???
    Je voudrais en sorte d'appeler qu'une seule fois le glDrawArray pour le multitexturing ???


    Citation Envoyé par dragonjoker59 Voir le message
    Euh, pour le multitexturing, tu as juste à binder tes différentes textures, et leur attribuer une variable uniforme dans ton fragment shader.
    Les texture array ou les texture 3D ne sont pas forcément pour la même chose

    EDIT :
    Un code de shader utilisant le multitexturing :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #version 430
    in	vec3 texture;
    uniform sampler2D mapDiffuse;
    uniform sampler2D mapOpacity;
    layout( location=0 ) out vec4 FragColor;
     
    void main()
    {
        vec4 l_diffuse = texture2D( mapDiffuse, texture.xy );
        float l_opacity = texture2D( mapOpacity, texture.xy ).a;
        FragColor = vec4( l_diffuse.rgb, l_opacity );
    }

  4. #4
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    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 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Pour binder une texture, ça se fait en 2 fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    glActiveTexture( GL_TEXTURE0 + index );
    glBindTexture( GL_TEXTURE_2D, glname );
    avec index commençant à 0 et allant au maximum supporté de textures simultanément bindées, par ta carte graphique.

    Ensuite, une fois que tes différentes textures sont bindées, tu fais un seul appel à glDraw*.

    glTexSubImage* te permet de définir les données d'une texture, rien d'autre.
    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).

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    905
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 905
    Points : 85
    Points
    85
    Par défaut
    ok,

    merci.

    Donc on ne peux pas utiliser glTexSubImage3d ??
    car j'avais vu ça quelque part

  6. #6
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    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 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Pour faire du multitexturing ce n'est pas du tout indiqué.
    si tu veux absolument stocker toutes tes textures en une seule, tu as 2 méthodes :
    - Texture array (avec glTexture2DArray)
    - Texture atlas (en stockant tes différentes images dans une seule puis en recalculant tes coordonnées de texture)
    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).

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    905
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 905
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Pour binder une texture, ça se fait en 2 fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    glActiveTexture( GL_TEXTURE0 + index );
    glBindTexture( GL_TEXTURE_2D, glname );
    avec index commençant à 0 et allant au maximum supporté de textures simultanément bindées, par ta carte graphique.

    Ensuite, une fois que tes différentes textures sont bindées, tu fais un seul appel à glDraw*.

    glTexSubImage* te permet de définir les données d'une texture, rien d'autre.
    C'est surement la bonne méthode , mais si je veux afficher plus de texture que ma carte video en supporte,
    comment je dois faire dans ces cas là ?

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Pour cela, il faut réussir à n'avoir que le maximum de textures permises par draw call.
    Cela veut aussi dire que vous devez faire en sorte de spliter vos draw call afin que chacun ne dépasse pas le nombre de texture permises. De plus, le changement de texture peut être couteux (même si je n'en suis pas très sur).
    Faites aussi attention à la mémoire vidéo maximale.
    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.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    905
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 905
    Points : 85
    Points
    85
    Par défaut
    Merci

Discussions similaires

  1. [OpenGL 2.x] Multiple bindtexture ou fog dans un seul VBO.
    Par yann458 dans le forum OpenGL
    Réponses: 1
    Dernier message: 02/03/2014, 09h29
  2. [1.x] Enregistrement multiple dans une seule table
    Par micky86 dans le forum Symfony
    Réponses: 20
    Dernier message: 27/06/2011, 12h34
  3. Multiple requête dans 1 seul TQUERY
    Par AODRENN dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/06/2007, 10h41
  4. sélection multiple de valeurs dans un seul champ
    Par antoine0207 dans le forum Access
    Réponses: 4
    Dernier message: 04/07/2006, 17h01

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