нормалізація glVertexAttribPointer


11

glVertexAttribPointer (індекс, розмір, тип, нормалізований, крок, вказівник);

Якщо я використовую type = GL_UNSIGNED_BYTE і нормалізується = GL_TRUE

як це нормалізується? чи поділили б дані на 256 для нормалізації? або? Це означатиме, що немає можливості мати нормоване значення '1.0f' ..

Відповіді:


13

З посібника,

Якщо встановлено значення GL_TRUE, нормалізоване означає, що значення, збережені у цілому форматі, повинні бути відображені до діапазону [-1,1] (для знаків, що підписуються) або [0,1] (для непідписаних значень), коли вони отримують доступ та перетворюються на плаваюча точка.

Я вважаю, що це означає, що при неподписаному 8-бітовому типі 0 відображатиметься до 0,0f, а 255 - 1,0f.


Отже, це означає, що він ділиться на 255?
Джонатан

Правильний, неподписаний байт має діапазон від 0 до 255. Отже, якщо ви перейшли 0xFF (що дорівнює 255), ви отримаєте 1,0f.
нотлеш

7
... Ви коли-небудь грали оригінальну Зельду? Максимальна кількість рубінів, яку ви могли утримати, становила 255, а не 256;)
Нотшлеш

Я знаю, що непідписані байти йдуть лише до 255 .. Мені було просто цікаво, бо, здавалося, логіці GPU ділиться потужністю два
Джонатан,

Мені було цікаво щось подібне. Можливо, буде ефективна конверсія з uint_8 в плаваючу, яка не робить більше, ніж переміщення бітів навколо, але я не запитую ... Хтось, хто знає більше про FPU, може задзвонити?
нотлеш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.