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 :

[OpenGL 3.3] BlackScreen VBO


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 14
    Par défaut [OpenGL 3.3] BlackScreen VBO
    Bonjour @ tous,

    Développant actuellement un projet en cours, je souhaite utiliser un VBO + IBO.

    J'ai analyser plusieurs fois mon code et je ne vois pas l'erreur.
    Aucune erreur OpengL, et aucune erreur de compilation, mais le résultat est un bel écran noir!

    Création VBO
    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
     
    float longueur = 10.f;
     
            Vector3 Vertices[nb_point_par_ligne*nb_point_par_ligne];
            for(float ii=0,i=-longueur/2; i<longueur/2; i+=(longueur/nb_point_par_ligne), ii++)
                for(float jj=0,j=-longueur/2; j<longueur/2; j+=(longueur/nb_point_par_ligne), jj++)
                    Vertices[(int)(ii*nb_point_par_ligne+jj)]=Vector3(i,j,0.f);
    float tmp[nb_point_par_ligne*nb_point_par_ligne*3];
                for(int i=0;i<nb_point_par_ligne*nb_point_par_ligne ;i++)
            for(int j=0;j<3;j++)
                {
                tmp[i*3+j]=Vertices[i][j];
            }
        glGenBuffers(1, &VBO);
        glBindBuffer(GL_ARRAY_BUFFER, VBO);
        glBufferData(GL_ARRAY_BUFFER, sizeof(tmp), tmp, GL_STATIC_DRAW);
    Création IBO
    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
     
    unsigned int Indices[3*(nb_point_par_ligne-1)*(nb_point_par_ligne-1)*2];
            int cpt=0;
            for(int i=0; i<nb_point_par_ligne-1; i++)
                for(int j=0; j<nb_point_par_ligne-1; j++)
                    {
                    int ind = i*nb_point_par_ligne+j;
                    Indices[cpt]= ind;
                    Indices[cpt+1]= ind + nb_point_par_ligne;
                    Indices[cpt+2]= ind + 1;
                    Indices[cpt+3]= ind + nb_point_par_ligne;
                    Indices[cpt+4]= ind + nb_point_par_ligne+1;
                    Indices[cpt+5]= ind + 1;
                    cpt+=6;
     
                }
     
     
     
        glGenBuffers(1, &IBO);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Indices), Indices, GL_STATIC_DRAW);
    Rendu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    glEnableVertexAttribArray(0);
                glBindBuffer(GL_ARRAY_BUFFER, VBO);
     
                glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
                glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
     
     
                glDrawElements(GL_TRIANGLES, 3*(nb_point_par_ligne-1)*(nb_point_par_ligne-1)*2, GL_UNSIGNED_INT, 0);
     
     
                glDisableVertexAttribArray(0);
    J'ai surement oublier une option, mais je ne vois pas laquelle, j'ai regarder le tutoriel disponible sur ce site mais je n'ai rien décelé.

    Je vous remercie par avance

    Some0ne

  2. #2
    Expert confirmé

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

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    C'est quoi le code de ton/tes shaders utilisés pour le rendu de ta scène ?
    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 averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 14
    Par défaut
    Merci dragonjoker59, du temps que tu m'accordes.

    Hum les shaders utilisés sont plutot imbuvable, qu'aurais tu besoin de savoir dessus? Ils fonctionnent très bien si je fait un appel en opengl 2 classique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    float size = 2 ;
        float pas = 0.05f ;
        for (float i = -size; i < size-pas; i += pas){
                glBegin(GL_TRIANGLE_STRIP);
                for (float j = -size; j < size; j += pas){
                        float height =0;
                        glVertex3f(i,height,j);
                        glVertex3f(i+pas,height,j);
                    }
                glEnd();
            }
    Normalement le VBO +IBO de mon post précédent doit générer une grille régulière d'ordonnée de coordonnée y=0 centrée en en x=0 z=0

  4. #4
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Par défaut
    As-tu testé avec des shaders basiques ? en gros un vertex shader qui fait rien d'autre que les transformation matricielle et fragment shader qui gère la couleur.

    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
     
    #version 330
     
    in vec3 vertexPosition_in;
    in vec3 color_in;
     
    uniform mat4 projectionMatrix;
    uniform mat4 viewMatrix;
     
    /* Sorties */
    out vec3 color_v;
     
    void main ()
    {
       gl_Position = projectionMatrix * viewMatrix * vec4( vertexPosition_in, 1.0 );
       color_v = color_in;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #version 330
     
    in vec3 color_v;
     
    out vec4 color_out;
     
    void main()
    {
       color_out = vec4( color_v, 1.0 );
    }
    C'est juste pour être sur du coup et après faudra effectivement regarder plus en détail tes VBO's => remplissage, transmission aux shaders etc... si tout est correct.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 14
    Par défaut
    Bonjour,

    j'ai adapté les shaders, pour que ce soit en adéquation avec mon programme :
    donc vertex shader :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #version 330
     
    layout (location = 0) in vec3 vertexPosition_in;
    out vec3 color_v;
     
    uniform mat4 gWVP;
     
    void main ()
    {
       gl_Position = gWVP * vec4( vertexPosition_in, 1.0 );
    }
    et fragment shader :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #version 330
     
    in vec3 color_v;
     
    out vec4 color_out;
     
    void main()
    {
       color_out = vec4( color_v, 1.0 );
    }
    Le résultat est le même j'ai un écran noir. Je ne comprend pas.

    Mon objectif final est de tracer une grille non régulière comme celle présentée ici : http://http.developer.nvidia.com/GPU...chapter02.html

    Je profite du fil, pour poser une question supplémentaire.
    Comme vous pouvez le constater, j'ai utilisé un tutoriel, pour gérer mes matrices. Sachant que j'ai a ma disposition, une camera compose de 3 vecteurs (position,up,target) pourriez vous me dire comment générer facilement mes matrices de projection et de view.

    Merci de votre aide et de votre temps

    Some0ne

  6. #6
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Par défaut
    Pour ce qui est des matrices, je te conseil vivement la librairie GLM : http://glm.g-truc.net/

    Avec cette librairie tu peux faire un tas de chose et la syntaxe est identique à la syntaxe de la GLSL.

    Pour tes matrices il existe dans cette librairie : http://glm.g-truc.net/html/a00133.ht...ec681e20cb70f6

    générer une matrice de projection, etc... tu peux aussi créer des matrices de rotation, scale, translation etc...

    Je te laisse découvrir cette merveilleuse librairie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     _proj = glm::perspective( 70.0f,
                                  ( ( GLfloat ) WIDTH ) / ( ( GLfloat ) HEIGHT ),
                                  0.1f,
                                  1000.0f );
    _view = glm::lookAt( _position,
                                  _target,
                                  _vertical );
    Voilà ce que je fais en général pour mes matrices => _proj et _view sont du type glm::mat4

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

Discussions similaires

  1. Tutoriel OpenGL Moderne : indexation de VBO
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 14/05/2014, 08h09
  2. [OpenGL 4.x] Problème VBO
    Par 0_Azerty_0 dans le forum OpenGL
    Réponses: 6
    Dernier message: 14/03/2013, 09h27
  3. Réponses: 11
    Dernier message: 01/03/2008, 16h59
  4. VBO : OpenGL non, DirectX si.
    Par deadalnix dans le forum API graphiques
    Réponses: 8
    Dernier message: 20/08/2007, 21h49
  5. Performances OpenGL, Vertex Array, (VBO ?)
    Par Burckel dans le forum OpenGL
    Réponses: 6
    Dernier message: 07/03/2007, 10h40

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