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


11

glVertexAttribPointer (индекс, размер, тип, нормализация, шаг, указатель);

Если я использую тип = 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.
notlesh

7
... Вы когда-нибудь играли в оригинальную Zelda? Максимальное количество рубинов, которое вы могли держать, было 255, а не 256;)
notlesh

Я знаю, что беззнаковые байты идут только до 255. Мне просто интересно, потому что для логики логическое деление на степень два
Джонатан

Мне было интересно, что-то подобное. Может быть эффективное преобразование из uint_8 в float, которое не делает больше, чем просто сдвигает биты, но я не тот, кто спрашивает ... Кто-то, кто знает больше о FPU, может вмешаться?
notlesh
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.