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.

@++