Normalização glVertexAttribPointer

11

glVertexAttribPointer (índice, tamanho, tipo, normalizado, passada, ponteiro);

Se eu usar o tipo = GL_UNSIGNED_BYTE e normalizado = GL_TRUE

como é normalizado? os dados seriam divididos por 256 para normalização? ou? Isso significa que não há como ter um valor normalizado de '1.0f'.

Jonathan
fonte

Respostas:

13

No manual,

Se definido como GL_TRUE, normalizado indica que os valores armazenados em um formato inteiro devem ser mapeados para o intervalo [-1,1] (para valores assinados) ou [0,1] (para valores não assinados) quando forem acessados ​​e convertidos em ponto flutuante.

Entendo que isso significa que, com um tipo de 8 bits não assinado, 0 seria mapeado para 0,0f e 255 seria mapeado para 1,0f.

entalhe
fonte
Então isso significa que é dividido por 255?
Jonathan
Certo, o byte não assinado tem um intervalo de 0 a 255. Portanto, se você passou 0xFF (que é igual a 255), obteria 1,0f.
notlesh
7
... Você já jogou o Zelda original? O montante máximo de rubis você poderia prender foi de 255, não 256;)
notlesh
Eu sei que bytes não assinados só vão para 255 .. Eu só estava me perguntando porque parecia lógica para a GPU para dividir por uma potência de dois filhos
Jonathan
Eu queria saber algo semelhante. Pode haver uma conversão eficiente do uint_8 para o float que não faz muito mais do que mudar os bits, mas não sou o único a perguntar ... Alguém que sabe mais sobre as FPU pode se interessar?
N