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 :

Rendu de terrain très lent - shaders or not shaders ? [OpenGL 1.x]


Sujet :

OpenGL

  1. #21
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    il faut utiliser la macro GLEW_STATIC.
    Cest-à-dire ? Je ne trouve pas cette macro. En parlant de macro justement, je me suis aperçu qu'il existait une macro du nom de "glGenBuffers", bref ça n'a pas de sens, je ne comprends plus rien ...

  2. #22
    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
    Voici la documentation.
    La phrase :
    On Windows, you also need to define the GLEW_STATIC preprocessor token when building a static library or executable
    Il faut soit, faire un #define GLEW_STATIC dans le main (mais je ne suis pas sûr que cela suffise), soit ajouter le GLEW_STATIC dans les options du préprocesseur, dans les options du projet.
    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. #23
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut
    Il me dit "cannot find -lGLEW_STATIC"

  4. #24
    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
    Je n'ai pas dit de le donner en option de l'éditeur de liens (linker), mais en option du préprocesseur.
    Si on prend cette fenêtre :
    Il faut mettre GLEW_STATIC dans "Compiler Settings", si je ne dis pas de bêtises.
    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.

  5. #25
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut
    Oui ça fonctionne enfin, merci beaucoup !

  6. #26
    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 388
    Points
    11 388
    Billets dans le blog
    11
    Par défaut
    Le principe de ce define est de dire à glew qu'on en utilise la version bibliothèque statique.
    Il suffit de le mettre avant chaque include à glew.h, ou comme te l'a indiqué LittleWhite en option de préprocesseur au niveau du projet.
    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. #27
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut
    D'accord, merci pour le tuyau.
    Dès que j'en aurai le temps je me lancerai dans les VBO. En attendant bon réveillon !

  8. #28
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut
    Bonsoir à tous et bonne année !
    Comme prévu, je me suis un peu consacré aux VBO, je suis finalement parvenu à afficher la map mais le résultat est vraiment décevant : C'est de l'image par image, ça marchait bien mieux avec les Vertex Array ! Voici mon code :

    La fonction chargeTerrain() :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    void chargeTerrain(Terrain *Map)
    {
        int positionDsFichier,tailleFichier;
        int compteurVertices=0,compteurCoordTex=0;
     
        Vertex *liste_vertices=(Vertex*)malloc(MAX_TOTAL_VERTICES*sizeof(Vertex));
        coordTex *coord_textures=(coordTex*)malloc(MAX_TOTAL_VERTICES*sizeof(coordTex));
     
        FILE *fichierObj=NULL;
        FILE *fichierMtl=NULL;
     
        const int taille_max_ligne=3000;
        char ligneLue[taille_max_ligne];
        char *retour_fgets;
        int tailleTotale;
     
        ...//Ouverture fichiers
     
    	if(fichierObj!=NULL && fichierMtl!=NULL)
        {
            fseek(fichierObj,0,SEEK_END);
            tailleFichier=ftell(fichierObj);
            rewind(fichierObj);
     
    		while(1)                //Stockage de tous les vertices dans un tableau provisoire
            {
                retour_fgets=fgets(ligneLue,taille_max_ligne,fichierObj);
                if(retour_fgets==NULL)
                    break;
     
                if(ligneLue[0]=='v'&&ligneLue[1]==' ')
                {
                    sscanf(ligneLue,"v %f %f %f\n",
                           &liste_vertices[compteurVertices].x,
                           &liste_vertices[compteurVertices].y,
                           &liste_vertices[compteurVertices].z);
     
                    compteurVertices++;
                }
     
                if(ligneLue[0]=='v'&&ligneLue[1]=='t')
                {
                    sscanf(ligneLue,"vt %f %f\n",
                           &coord_textures[compteurCoordTex].x,
                           &coord_textures[compteurCoordTex].y);
     
                    compteurCoordTex++;
                }
            }
     
            rewind(fichierObj);
     
            Map->vertices=(float*)malloc(MAX_TOTAL_VERTICES*3*sizeof(float));
            Map->coord_tex=(float*)malloc(MAX_TOTAL_VERTICES*2*sizeof(float));
            Map->couleurs=(float*)malloc(MAX_TOTAL_VERTICES*3*sizeof(float));
            Map->textures=(GLint*)malloc(MAX_TOTAL_FACES*sizeof(GLint));
            Map->nbVerticesParFace=(int*)malloc(MAX_TOTAL_FACES*sizeof(int));
     
            Map->taille_liste_vertices=MAX_TOTAL_VERTICES*3*sizeof(float);
            Map->taille_liste_coordTex=MAX_TOTAL_VERTICES*2*sizeof(float);
            Map->taille_liste_couleurs=MAX_TOTAL_VERTICES*3*sizeof(float);
     
            tailleTotale=Map->taille_liste_vertices+Map->taille_liste_coordTex+Map->taille_liste_couleurs;
     
            chargeVA(fichierObj,fichierMtl,Map,liste_vertices,coord_textures);		//Lecture des faces dans le fichier .obj et chargement des matériaux
     
            glewInit();
     
            glGenBuffers(ID_BUFFER,&Map->Buffer);       //Initialisation identifiant buffer VBO
     
            glBindBuffer(GL_ARRAY_BUFFER,Map->Buffer);
     
            glBufferData(GL_ARRAY_BUFFER,tailleTotale,NULL,GL_STREAM_DRAW);     //Allocation mémoire CG
     
            glBufferSubData(GL_ARRAY_BUFFER,0,Map->taille_liste_vertices,Map->vertices);     //Allocation des tableaux
            glBufferSubData(GL_ARRAY_BUFFER,Map->taille_liste_vertices,Map->taille_liste_coordTex,Map->coord_tex);
            glBufferSubData(GL_ARRAY_BUFFER,Map->taille_liste_vertices+Map->taille_liste_coordTex,Map->taille_liste_couleurs,Map->couleurs);
     
            glBindBuffer(GL_ARRAY_BUFFER,0);
        }
     
        fclose(fichierObj);
        fclose(fichierMtl);
     
        free(liste_vertices);
        free(coord_textures);
    }
    Fonction dessinTerrain() :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #define BUFFER_OFFSET(a) ((char*)NULL + (a))
     
    void dessinTerrain(Terrain *Map)
    {
        int compteurFaces=0,nbVertices,nouvNbVertices,first=0;
        GLint texPrecedente=-2,texture;
     
        glBindBuffer(GL_ARRAY_BUFFER,Map->Buffer);
     
        glVertexPointer(3,GL_FLOAT,0,BUFFER_OFFSET(0));
        glTexCoordPointer(2,GL_FLOAT,0,BUFFER_OFFSET(Map->taille_liste_vertices));
        glColorPointer(3,GL_FLOAT,0,BUFFER_OFFSET(Map->taille_liste_vertices+Map->taille_liste_coordTex));
     
        glEnableClientState(GL_VERTEX_ARRAY);
        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
        glEnableClientState(GL_COLOR_ARRAY);
     
        while(1)
        {
            nbVertices=Map->nbVerticesParFace[compteurFaces];
     
            texture=Map->textures[compteurFaces];
            if(compteurFaces>=1)
                texPrecedente=Map->textures[compteurFaces-1];
     
            if(texture!=texPrecedente)
                glBindTexture(GL_TEXTURE_2D,(GLuint)texture);
     
            if(nbVertices==3)
            {
                glDrawArrays(GL_TRIANGLES,first,3);
                first+=3;
            }
     
            if(nbVertices==4)
            {
                glDrawArrays(GL_QUADS,first,4);
                first+=4;
            }
     
            if(nbVertices>=5)
            {
                glDrawArrays(GL_POLYGON,first,nbVertices);
                first+=nbVertices;
            }
     
            compteurFaces++;
     
            if(first>=Map->nbTotalVertices)
                break;
        }
     
        glDisableClientState(GL_VERTEX_ARRAY);
        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
        glDisableClientState(GL_COLOR_ARRAY);
    }
    Je ne m'attendais pas à un résultat si décevant alors que d'après ce que j'ai lu, les VBO permettent un bien meilleur rendu qu'avec les VA, ici c'est l'inverse !

    Merci par avance pour votre aide

  9. #29
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut
    Bon et bien je n'arrive malheureusement à rien, c'est à croire que finalement on obtient un bien meilleur résultat avec les Vertex Array que les Vertex Buffer Objects, dommage ...

  10. #30
    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
    Si je comprends bien votre code, vous faites un glDrawArrays par polygones ? (triangle, carré, truc à 5 côté) ? Si c'est ça, il faut savoir que vous devriez diminuer votre nombre de draw call (soit, d'appels à glDrawArrays), car, c'est la bonne pratique de limiter son nombre d'appel. D'ailleurs, en réalité, vous devriez avoir un seul appel à glDrawArrays pour tout votre terrain (en théorie).
    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.

  11. #31
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut
    Oui c'est ça, car je dois contrôler sa texture pour chaque polygone. Sinon comment appliquer mes textures ?

  12. #32
    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
    Chaque polygone pourrait avoir des coordonnées de texture différente (et normalement, ne nécessité qu'un seul draw call). Après, si vous ne pouvez pas regrouper tous les détails du terrain en une texture géante que l'on applique comme on pose une nappe sur la table, vous pouvez tenter le multi texturing (plusieurs textures que l'on peut mélanger à volonté et comme vous semble) pour mêler l'herbe, le sable, la neige, tout ça), Et si vraiment cela ne suffit pas, car vous voulez appliquer des textures extrêmement différente et varier par "case" ou "morceau" de terrain, vous pouvez utiliser une méga texture (une texture qui embarque plusieurs textures, comme on peut le voir ici) dont vous contrôlez ce qui va apparaître grâce ... aux coordonnées de texture (comme toujours ).

    Dans tous les cas, il faut trouver une méthode pour faire chuter le nombre de draw call, sachant qu'un jeu triple A, c'est 100 draw call en moyenne (et puis de toute façon, c'est une hérésie de dessiner que 3/4/5 sommets par draw call).
    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.

  13. #33
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut
    Je ne peux pas utiliser de texture géante car il y a des détails dans la map comme des panneaux ou des bâtiments, ni de méga texture car certaines textures sont dupliquées et d'autres pas. J'imagine qu'il ne me reste que la solution du multi texturing.

  14. #34
    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
    Euh ... ...
    Bah il va falloir (au moins trouver une solution).
    On peut voir une capture d'écran de votre terrain, afin de mieux comprendre les contraintes (et ainsi donner des solutions).

    Aussi, juste par curiosité, pouvez-vous ajouter un compteur de draw calls et nous donner le nombre d'appels par image, s'il vous plait.
    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.

  15. #35
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut
    La map représente divers massifs comme la Ste-Victoire ou la Ste-Baume avec une voie ferrée que je suis entrain de modéliser, ainsi que des gares ferroviaires, tunnels et viaducs :

    Nom : Forum_VA(3).jpg
Affichages : 151
Taille : 93,5 Ko
    Nom : Forum_VA(2).jpg
Affichages : 202
Taille : 110,2 Ko

    Comme vous pouvez le voir, il y a des textures pour panneaux, murs, ballast ...

    Sous Blender, ça ressemble à ça :

    Nom : Forum_VA(1).jpg
Affichages : 241
Taille : 78,3 Ko

    Etant donné qu'il y a 116 737 faces dans la map, je fais 116 737 appels à glDrawArrays() par frame. S'il y a moyen de ne faire qu'un appel par frame alors je suis preneur.

  16. #36
    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
    Évidemment qu'il y a des méthodes. Déjà, le terrain ne devrait être composé que ... du terrain (relief). Cela veut dire que vous ne devez pas y intégrer, ni les batiments, ni le chemin de fer (pour ce dernier j'hésite, mais je pense que l'on devrait éviter de l'intégrer).
    Pour les bâtiments, il faut en faire des modèles 3D à part (chaque bâtiment, un modèle 3D). Pour le chemin de fer, un modèle 3D (mais juste une section), que vous réutiliserez autant de fois que nécessaire pour faire le chemin.

    Ainsi, pour le terrain (relief) vous pourrez utiliser toutes les techniques sus mentionnées.

    Ensuite, vous pourrez améliorer l'affichage des modèles, en ne les affichant que s'ils sont dans le champ de vision de la caméra (frustrum culling). Ainsi, un truc à 3 km, vous ne le verrez pas et vous ne perdrez pas de temps à l'afficher.

    Aidez-vous des ressources de ce genre :

    (Hors partie génération qui ne vous intéressent pas.)
    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.

  17. #37
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut
    Corrigez-moi si je me trompe mais on ne peut faire qu'un seul appel à gl*Pointer(), sous peine d'écraser des données. De ce fait, je suis obligé de regrouper tous les vertices dans un seul array, c'est pour ça que je combine le terrain avec les bâtiments et le reste.

  18. #38
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Etant donné qu'il y a 116 737 faces dans la map, je fais 116 737 appels à glDrawArrays() par frame. S'il y a moyen de ne faire qu'un appel par frame alors je suis preneur.
    Violent
    Euh ouais encore heureux que tu ne peux faire qu'un appel , c'est quoi qui te pose souci ?
    Tu organise tes triangle par texture et donc tu réduit par 7 DrawCall si tu as 7 texture différentes.

  19. #39
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par Kannagi Voir le message
    Tu organise tes triangle par texture et donc tu réduit par 7 DrawCall si tu as 7 texture différentes.
    Je crois que c'est effectivement la solution, merci bien !

  20. #40
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2013
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 309
    Points : 105
    Points
    105
    Par défaut
    J'ai mis en pratique cette solution : glDrawArrays() est appelée uniquement lorsqu'il faut appliquer une nouvelle texture, et ça fonctionne très bien, le rendu est bien plus fluide, merci beaucoup pour ces conseils !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [OpenGL 3.x] Problème envoi de données du geometry shader au fragment shader
    Par kirkm9 dans le forum OpenGL
    Réponses: 4
    Dernier message: 01/05/2016, 04h57
  2. pixel shader 2.0
    Par trois_1 dans le forum DirectX
    Réponses: 3
    Dernier message: 20/10/2003, 15h39
  3. Vertex et Pixel Shader
    Par Riko dans le forum OpenGL
    Réponses: 2
    Dernier message: 06/06/2003, 16h45
  4. carte graphique et pixels shader
    Par yeeep dans le forum DirectX
    Réponses: 2
    Dernier message: 26/04/2003, 10h54

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