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”.

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.