Normalisation de glVertexAttribPointer

11

glVertexAttribPointer (index, taille, type, normalisé, foulée, pointeur);

Si j'utilise type = GL_UNSIGNED_BYTE et normalisé = GL_TRUE

comment est-il normalisé? les données seraient-elles divisées par 256 pour la normalisation? ou? Cela signifierait qu'il n'y a aucun moyen d'avoir une valeur normalisée de '1.0f'.

Jonathan
la source

Réponses:

13

Du manuel,

S'il est défini sur GL_TRUE, normalisé indique que les valeurs stockées dans un format entier doivent être mappées à la plage [-1,1] (pour les valeurs signées) ou [0,1] (pour les valeurs non signées) lors de leur accès et de leur conversion en point flottant.

Je suppose que cela signifie qu'avec un type 8 bits non signé, 0 correspondrait à 0,0f et 255 correspondrait à 1,0f.

notlesh
la source
Cela signifie donc qu'il est divisé par 255?
Jonathan
À droite, l'octet non signé a une plage de 0 à 255. Donc, si vous avez passé 0xFF (qui est égal à 255), vous obtiendrez 1.0f.
2011
7
... Avez-vous déjà joué le Zelda original? Le nombre maximum de rubis que vous pouviez contenir était de 255, pas 256;)
notlesh
Je sais que les octets non signés n'atteignent que 255 .. Je me demandais simplement parce qu'il semblait logique que le GPU se divise par une puissance de deux
Jonathan
Je me demandais quelque chose de similaire. Il peut y avoir une conversion efficace de uint_8 en float qui ne fait pas beaucoup plus que déplacer des bits, mais je ne suis pas le seul à demander ... Quelqu'un qui en sait plus sur les FPU pourrait sonner?
2011