glVertexAttribPointer normalization


11

glVertexAttribPointer (indice, dimensione, tipo, normalizzato, falcata, puntatore);

Se uso type = GL_UNSIGNED_BYTE e normalizzato = GL_TRUE

come è normalizzato? i dati sarebbero divisi per 256 per la normalizzazione? o? Ciò significherebbe che non c'è modo di avere un valore normalizzato di '1.0f' ..

Risposte:


13

Dal manuale,

Se impostato su GL_TRUE, normalizzato indica che i valori memorizzati in un formato intero devono essere mappati nell'intervallo [-1,1] (per valori con segno) o [0,1] (per valori senza segno) quando si accede e convertiti in virgola mobile.

Presumo che ciò significhi che, con un tipo a 8 bit senza segno, 0 verrebbe mappato su 0.0f e 255 mapperebbe su 1.0f.


Ciò significa che è diviso per 255?
Jonathan,

A destra, il byte senza segno ha un intervallo compreso tra 0 e 255. Quindi, se si supera 0xFF (che è uguale a 255), si otterrà 1.0f.
notlesh

7
... Hai mai suonato l'originale Zelda? La quantità massima di rubini che potresti contenere era 255, non 256;)
notlesh

So che i byte senza segno vanno solo a 255 .. Mi stavo solo chiedendo perché sembrava logico che la GPU si dividesse per una potenza di due
Jonathan

Mi chiedevo qualcosa di simile. Potrebbe esserci una conversione efficiente da uint_8 a float che non fa molto di più che spostare i bit in giro, ma non sono io a chiedere ... Qualcuno che sa di più sulle FPU potrebbe intervenire?
notlesh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.