Bonjour.

Depuis quelques temps j'ai un problème avec l'utilisation de GLES20 sur android.
Lorsque je fais une simple rotation de matrice pour dessiner une forme quelconque (point, ligne par exemple), j'ai toujours un légers décalage par rapport au centre de rotation qui n'est pas désirable.

Avez vous une idée d'où cela peut il venir ?

voici mon code pour une ligne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
        float[] line = new float[]{
                -2,0,0,
                2,0,0
        };
        lineBuffer = ByteBuffer.allocateDirect(line.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer() ;
        lineBuffer.put(line).position(0);
voici le code pour dessiner deux lignes censées se couper au centre.
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
 
 
        GLES20.glUseProgram(shader_grid.program);
        Matrix.setIdentityM(Surface.model, 0);
        buffer_grid.load(shader_grid.a_Position);
        Surface.buildMatrix(shader_grid.u_Matrix, Surface.viewHUD, Surface.projectionSCREEN, Surface.model, Surface.matrix);
        GLES20.glVertexAttribPointer(shader_grid.a_Position, 3, GLES20.GL_FLOAT, false, 0, lineBuffer);
        GLES20.glEnable(shader_grid.a_Position);
        GLES20.glDrawArrays(GLES20.GL_LINES, 0, 2);
 
        Matrix.rotateM(Surface.model, 0, -90, 0, 0, 1);
        Surface.buildMatrix(shader_grid.u_Matrix, Surface.viewHUD, Surface.projectionSCREEN, Surface.model, Surface.matrix);
        GLES20.glVertexAttribPointer(shader_grid.a_Position, 3, GLES20.GL_FLOAT, false, 0, lineBuffer);
        GLES20.glEnable(shader_grid.a_Position);
        GLES20.glDrawArrays(GLES20.GL_LINES, 0, 2);
voici comment je charge les matrices :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
    static void buildMatrix(int u_, float[] view_, float[] projection_, float[] model_, float[] matrix_ ){
 
        Matrix.multiplyMM(matrix_, 0, view_, 0, model_, 0);
        Matrix.multiplyMM(matrix_, 0, projection_, 0, matrix_, 0);
        GLES20.glUniformMatrix4fv(u_, 1, false, matrix_, 0);
 
    }
le résultat est que la première ligne est impeccable mais la 2ème après rotation est légèrement décalée sur la droite. En faisant d'autres tests avec d'autres formes et d'autres angles, j'ai pu constater qu'il y avait toujours ce légers décalage en fonction de l'angle.
J'ai beau changer de projection (avec une projection en carré), de viewport, toujours ce même décalage.

Est ce normal que la matrice de rotation d'android produise cela ?