Bonjour

Je travaille sur mon Color PIcking. Comme vous le savez, je fais de la visualisation de réseaux de molécules. Pour le moment, le color picking fonctionne à merveille pour les noeuds. Fort de cette expérience, je veux faire la même chose pour les liens.
Voici la fonction qui me donne mes tables de "fausses" couleurs:
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
 
private Vector<float[]>attributeColors(int limit, boolean node){
        Vector<float[]>v = new Vector<float[]>(limit);
        for(int r=1; r<254; r++){
            for(int g=0; g<255; g++){
                for(int b=0; g<255; g++){
                    int alpha = 255;
                    if(!node)
                        alpha=100;
                    Color c = new Color(r, g, b, alpha);
                    float[]comp = new float[4];
                    v.add(c.getComponents(comp));
                    if(v.size()==limit)
                        return v;
                }
            }
        }
        return v;
    }
Petit mot d'explication: je génère en réalité 2 vecteurs, un pour les noeuds, un autre pour les liens (paramètre boolean node dans ma méthode).
J'ai vérifié, mes 2 vecteurs sont bien rendues avec des valeurs correctes. Comme vous le voyez, la valeur alpha est placé à 255 pour les noeuds et à 100 pour les liens.
Voici maintenant ma méthode processing pour le color picking:
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
 
    private void pickPoint(GL gl) {
        int[]viewport = new int[4];
        gl.glGetIntegerv(GL.GL_VIEWPORT, viewport, 0);
        gl.glReadBuffer(GL.GL_BACK);
 
        FloatBuffer fb = BufferUtil.newFloatBuffer(4);
 
        gl.glPixelStorei (gl.GL_UNPACK_ALIGNMENT, 1);
 
        gl.glReadPixels(point.x, viewport[3]-point.y, 1, 1, gl.GL_RGBA, gl.GL_FLOAT, fb);
        processGLError(gl, gl.glGetError());
 
        float[]color = new float[4];
        for(int k=0; k<color.length; k++){
            color[k] = fb.get(k);
        }
 
        for(int k=0; k<4; k++){
            System.out.print(color[k]+"\t");
        }
        System.out.println();
 
        if(color[3]==1f){
            selected = searchNodeColor(color);
            System.err.println("Node="+selected);
            if(selected!=-1){
                setNeighbors();
                node_modified=true;
            }
        }
        else{
            e_selected = searchEdgeColor(color);
            System.err.println("Edge="+e_selected);
        }
 
        this.mouse_state = this.RELEASED;
    }
Voici maintenant les valeurs de mes tables pour un réseau constitué de 2 noeuds et un lien:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
falseColorNodes:
[0]=>{0.003921569, 0, 0, 1}
[1]=>{0.003921569, 0.003921569, 0, 1}
falseColorEdges:
[0]=>{0.003921569, 0, 0,  0.39215687}
Et voici ce que je récupère lors d'un clic sur le lien:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
0.65882355	0.65882355	0.65882355	1.0
Bizarre comme valeur pour le lien ! Et ça correspond pas du tout au background qui a pour couleur 1, 1, 1, 1.
Y aurait il un problème dans mon glReadPixels ?

Merci d'avance de votre aide.

@++