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.