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:
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).
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; }
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:
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
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; }
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
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}
Bizarre comme valeur pour le lien ! Et ça correspond pas du tout au background qui a pour couleur 1, 1, 1, 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 0.65882355 0.65882355 0.65882355 1.0
Y aurait il un problème dans mon glReadPixels ?
Merci d'avance de votre aide.
@++
Partager