glVertexAttribPointer normalizacja

11

glVertexAttribPointer (indeks, rozmiar, typ, znormalizowany, krok, wskaźnik);

Jeśli użyję wpisz = GL_UNSIGNED_BYTE i znormalizowany = GL_TRUE

jak to jest znormalizowane? czy dane zostałyby podzielone przez 256 w celu normalizacji? lub? Oznaczałoby to, że nie ma sposobu na znormalizowaną wartość „1.0f”.

Jonathan
źródło

Odpowiedzi:

13

Z instrukcji

Jeśli ustawiony na GL_TRUE, znormalizowany wskazuje, że wartości przechowywane w formacie liczb całkowitych mają być mapowane na zakres [-1,1] (dla wartości podpisanych) lub [0,1] (dla wartości niepodpisanych), gdy są dostępne i konwertowane na zmiennoprzecinkowy.

Rozumiem to, że przy niepodpisanym 8-bitowym typie 0 zamapowałoby na 0.0f, a 255 zmapowałoby na 1.0f.

notlesh
źródło
Oznacza to, że jest podzielony przez 255?
Jonathan
Racja, bajt bez znaku ma zakres od 0 do 255. Więc jeśli zdasz 0xFF (co jest równe 255), otrzymasz 1.0f.
notlesh
7
... Czy grałeś kiedyś w oryginalną Zeldę? Maksymalna ilość rubin, które mogłeś pomieścić, to 255, a nie 256;)
notlesh
Wiem, że bajty niepodpisane idą tylko do 255 .. Po prostu zastanawiałem się, ponieważ logika wydawała się dzielić GPU przez potęgę dwóch
Jonathan
Zastanawiałem się nad czymś podobnym. Może istnieć skuteczna konwersja z uint_8 na float, która nie robi nic więcej niż przesuwanie bitów, ale nie jestem tym, który pyta ... Ktoś, kto wie więcej o FPU, może się do niego włączyć?
notlesh