J'utilise la couleur picking dans opengl es sur Android et je calcule une clé de couleur pour le comparer aux valeurs que je reçois de glReadPixels:couleur picking sur android - glReadPixels erreurs d'arrondi
ByteBuffer PixelBuffer = ByteBuffer.allocateDirect(4);
PixelBuffer.order(ByteOrder.nativeOrder());
gl.glReadPixels(x, y, 1, 1, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, PixelBuffer);
byte b[] = new byte[4];
PixelBuffer.get(b);
String key = "" + b[0] + b[1] + b[2];
Cette clé peut être calculé manuellement pour chaque couleur:
public static byte floatToByteValue(float f) {
return (byte) ((int) (f * 255f));
}
d'abord la valeur en virgule flottante est converti en un intvalue puis castet à octet. Les valeurs float décrivent les colorchanels rouge vert bleu (de 0.0f à 1.0f). Exemple: 0.0f est converti en 255 (maintenant entier) puis de 255 à -1 en octet
Cela fonctionne bien mais opengl semble parfois faire des erreurs d'arrondi. Exemple:
0.895 -> -28 and opengl returns -27
0.897 -> -28 and opengl returns -27
0.898 -> -28 and opengl returns -27
0.8985 -> -27 and opengl returns -27
0.899 -> -27 and opengl returns -26
0.9 -> -27 and opengl returns -26
0.91 -> -24 and opengl returns -24
peut-être que ma méthode de calcul n'est pas correcte? Est-ce que quelqu'un a une idée comment éviter ces déviations?
ok mais il n'y a pas d'octets unsinged dans java alors comment convertir 0.895 à -27? –