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 :

Vertex array Vs rendu immédiat


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par défaut Vertex array Vs rendu immédiat
    Bonjour

    Afin d'accélérer mon rendu sur base d'OpenGL 2.0 (jogl 1.1.1 avec Java 6), j'ai décidé de favoriser les vertex arrays contre un rendu immédiat.
    Supposons que je veuille afficher un carré rouge. Voici l'implémentation "rendu iimédiat":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            float[]vector = getVector();
            gl.glColor4fv(nodeColor);
            float[]coords = getCoordinates();
            gl.glBegin(gl.GL_TRIANGLE_STRIP);
            gl.glVertex3f(coords[0] - SIDE_LENGTH + vector[0], coords[1] + SIDE_LENGTH + vector[1], coords[2]);
            gl.glVertex3f(coords[0] + SIDE_LENGTH + vector[0], coords[1] + SIDE_LENGTH + vector[1], coords[2]);
            gl.glVertex3f(coords[0] + SIDE_LENGTH + vector[0], coords[1] - SIDE_LENGTH + vector[1], coords[2]);
            gl.glVertex3f(coords[0] - SIDE_LENGTH + vector[0], coords[1] + SIDE_LENGTH + vector[1], coords[2]);
            gl.glVertex3f(coords[0] + SIDE_LENGTH + vector[0], coords[1] - SIDE_LENGTH + vector[1], coords[2]);
            gl.glVertex3f(coords[0] - SIDE_LENGTH + vector[0], coords[1] - SIDE_LENGTH + vector[1], coords[2]);
            gl.glEnd();
    Rien de bien sorcier.
    Voici le rendu vertex array:
    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
     
    private FloatBuffer nodeVertices;
        private FloatBuffer nodeColor;
        private ByteBuffer nodeIndices;
        private byte[]indices = {0, 1, 2, 3};
     
        private void setupNodeVerticesBuffer(){
            float[]coords = getCoordinates();
            float[]vector = getVector();
            final float[]array = {
                /**
                 * QUAD
                 * coords[0] - SIDE_LENGTH + vector[0], coords[1] + SIDE_LENGTH + vector[1], coords[2],
                 * coords[0] + SIDE_LENGTH + vector[0], coords[1] + SIDE_LENGTH + vector[1], coords[2],
                 * coords[0] + SIDE_LENGTH + vector[0], coords[1] - SIDE_LENGTH + vector[1], coords[2],
                 * coords[0] - SIDE_LENGTH + vector[0], coords[1] - SIDE_LENGTH + vector[1], coords[2]
                 */
                coords[0] - SIDE_LENGTH + vector[0], coords[1] + SIDE_LENGTH + vector[1], coords[2],
                coords[0] + SIDE_LENGTH + vector[0], coords[1] + SIDE_LENGTH + vector[1], coords[2],
                coords[0] + SIDE_LENGTH + vector[0], coords[1] - SIDE_LENGTH + vector[1], coords[2],
                coords[0] - SIDE_LENGTH + vector[0], coords[1] - SIDE_LENGTH + vector[1], coords[2]
            };
            nodeVertices = BufferUtil.newFloatBuffer(array.length);
            nodeVertices.put(array);
            nodeVertices.rewind();
        }
     
        private void setupNodeColorBuffer(){
            float[]colorComponds = getColorComponents(this.getColor());
            nodeColor = BufferUtil.newFloatBuffer(colorComponds.length);
            nodeColor.put(colorComponds);
            nodeColor.rewind();
        }
     
        private void setupNodeIndicesBuffer(){
            nodeIndices = BufferUtil.newByteBuffer(this.indices.length);
            nodeIndices.put(this.indices);
            nodeIndices.rewind();
        }
     
    public void draw(GL gl, GLU glu) {
            gl.glVertexPointer(3, GL.GL_FLOAT, 0, this.nodeVertices);
            gl.glColorPointer(4, GL.GL_FLOAT, 0, this.nodeColor);
            gl.glDrawElements(
                    GL.GL_QUADS,
                    this.indices.length,
                    GL.GL_UNSIGNED_BYTE,
                    this.nodeIndices);
        }
    Or, en rendu immédiat, mon carré est uniformément rouge (c'est ce que je veux). En vertex arrays, j'ai un coin qui est rouge et le reste qui est noir.
    Qu'aurais-je bien pu oublier ?

    Merci d'avance.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 399
    Par défaut
    Salut,

    il faut setter autant de fois la couleur qu il y a de vertices. Ce nest pas comme en mode immediat ou tu peux la setter une seule fois par set de vertices ayant la meme couleur. Pour les vertex array, il faut dupliquer. Tu as 4 vertices, il te faut 16 elements dans ton tableau de couleurs.

    Une autre methode est de passer en shading flat et de ne setter que la couleur du dernier vertex (c est celui la qui commandera la couleur de la primitive en flat). Mais il te faudra toujours le meme nombre d elements dans ton tableau.
    SPARK
    Moteur de particule C++ opensource avec modules de rendu OpenGL, Irrlicht et SFML

  3. #3
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par défaut
    Hello Frifron

    Merci pour la combine. Je l'implémenterai demain

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  4. #4
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par défaut
    Hello Frifron

    Tu avais raison, ça marche.
    Un grand merci à toi.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

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

Discussions similaires

  1. vertex arrays ~ mode immédiat
    Par Frifron dans le forum OpenGL
    Réponses: 4
    Dernier message: 01/08/2008, 12h22
  2. Choix entre rendu direct, vertex arrays et VBOs
    Par nicoenz dans le forum OpenGL
    Réponses: 5
    Dernier message: 07/03/2007, 11h58
  3. [SDL+glut] vertex array précompilés
    Par khayyam90 dans le forum OpenGL
    Réponses: 3
    Dernier message: 01/10/2004, 17h07
  4. vertex array
    Par Jbx 2.0b dans le forum OpenGL
    Réponses: 2
    Dernier message: 12/07/2004, 11h37
  5. Performance des vertex array
    Par Mathieu.J dans le forum OpenGL
    Réponses: 13
    Dernier message: 25/06/2004, 10h47

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