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.

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.