glVertexAttribPointer normalización

11

glVertexAttribPointer (índice, tamaño, tipo, normalizado, paso, puntero);

Si uso type = GL_UNSIGNED_BYTE y normalized = GL_TRUE

¿Cómo se normaliza? ¿Se dividirían los datos por 256 para la normalización? ¿o? Esto significaría que no hay forma de tener un valor normalizado de '1.0f'.

Jonathan
fuente

Respuestas:

13

Del manual,

Si se establece en GL_TRUE, normalizado indica que los valores almacenados en un formato entero deben asignarse al rango [-1,1] (para valores con signo) o [0,1] (para valores sin signo) cuando se accede y se convierte a punto flotante.

Supongo que significa que, con un tipo de 8 bits sin signo, 0 se asignaría a 0.0f y 255 se asignaría a 1.0f.

notlesh
fuente
¿Eso significa que está dividido entre 255?
Jonathan
Correcto, el byte sin signo tiene un rango de 0 a 255. Entonces, si pasa 0xFF (que es igual a 255), obtendría 1.0f.
notlesh
77
... ¿Alguna vez jugaste el Zelda original? La cantidad máxima de rubíes que podía tener era 255, no 256;)
notlesh
Sé que los bytes sin firmar solo van a 255 ... Me preguntaba porque parecía lógico que la GPU se dividiera por un poder de dos
Jonathan el
Me preguntaba algo similar. Puede haber una conversión eficiente de uint_8 a flotante que no hace mucho más que cambiar bits, pero no soy el único a quien preguntar ... ¿Alguien que sepa más sobre FPU podría intervenir?
notlesh