glVertexAttribPointer-Normalisierung

11

glVertexAttribPointer (Index, Größe, Typ, normalisiert, Schritt, Zeiger);

Wenn ich type = GL_UNSIGNED_BYTE und normalized = GL_TRUE verwende

Wie ist es normalisiert? Würden die Daten zur Normalisierung durch 256 geteilt? oder? Dies würde bedeuten, dass es keine Möglichkeit gibt, einen normalisierten Wert von '1.0f' zu haben.

Jonathan
quelle

Antworten:

13

Aus dem Handbuch,

Wenn auf GL_TRUE gesetzt, bedeutet normalisiert, dass in einem ganzzahligen Format gespeicherte Werte beim Zugriff und bei der Konvertierung in den Bereich [-1,1] (für vorzeichenbehaftete Werte) oder [0,1] (für vorzeichenlose Werte) abgebildet werden sollen Gleitkomma.

Ich verstehe das so, dass bei einem vorzeichenlosen 8-Bit-Typ 0 auf 0.0f und 255 auf 1.0f abgebildet wird.

notlesh
quelle
Das heißt also, es wird durch 255 geteilt?
Jonathan
Richtig, das Byte ohne Vorzeichen hat einen Bereich von 0 bis 255. Wenn Sie also 0xFF (was 255 entspricht) übergeben haben, erhalten Sie 1.0f.
Notlesh
7
... Hast du jemals das Original Zelda gespielt? Die maximale Menge an Rubinen, die Sie halten konnten, war 255, nicht 256;)
notlesh
Ich weiß, dass vorzeichenlose Bytes nur auf 255 gehen. Ich habe mich nur gefragt, weil es logisch schien, dass sich die GPU durch eine Zweierpotenz teilt
Jonathan
Ich habe mich etwas Ähnliches gefragt. Es mag eine effiziente Konvertierung von uint_8 zu float geben, die nicht viel mehr als das Verschieben von Bits bewirkt, aber ich bin nicht derjenige, der fragt ... Jemand, der mehr über FPUs weiß, könnte sich einschalten?
Notlesh