[jogl]Problème avec glReadPixels
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:
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:
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:
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:
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.
@++