normalisasi glVertexAttribPointer


11

glVertexAttribPointer (indeks, ukuran, jenis, dinormalisasi, melangkah, pointer);

Jika saya menggunakan tipe = GL_UNSIGNED_BYTE dan dinormalisasi = GL_TRUE

bagaimana itu dinormalisasi? apakah data akan dibagi 256 untuk normalisasi? atau? Ini berarti tidak ada cara untuk memiliki nilai normal '1.0f' ..

Jawaban:


13

Dari manual,

Jika diatur ke GL_TRUE, dinormalisasi menunjukkan bahwa nilai yang disimpan dalam format integer harus dipetakan ke kisaran [-1,1] (untuk nilai yang ditandatangani) atau [0,1] (untuk nilai yang tidak ditandatangani) ketika nilai tersebut diakses dan dikonversi ke titik mengambang.

Saya menganggap itu berarti bahwa, dengan tipe 8 bit yang tidak ditandatangani, 0 akan memetakan ke 0.0f dan 255 akan memetakan ke 1.0f.


Jadi itu berarti dibagi dengan 255?
Jonathan

Benar, byte unsigned memiliki rentang 0 - 255. Jadi jika Anda melewati 0xFF (yang sama dengan 255), Anda akan mendapatkan 1,0f.
notlesh

7
... Apakah Anda pernah memainkan Zelda asli? Jumlah maksimum rubi yang dapat Anda pegang adalah 255, bukan 256;)
notlesh

Saya tahu bahwa byte yang tidak ditandatangani hanya pergi ke 255 .. Saya hanya ingin tahu karena rasanya logis bagi GPU untuk membagi dengan kekuatan dua
Jonathan

Saya bertanya-tanya sesuatu yang serupa. Mungkin ada konversi yang efisien dari uint_8 ke float yang tidak melakukan lebih dari menggeser bit, tapi saya bukan orang yang bertanya ... Seseorang yang tahu lebih banyak tentang FPU mungkin berpadu?
notlesh
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.