glVertexAttribPointer normalizasyonu


11

glVertexAttribPointer (dizin, boyut, tür, normalleştirilmiş, adım, işaretçi);

= GL_UNSIGNED_BYTE türünü kullanırsam ve normalleştirilmişse = GL_TRUE

nasıl normalleştirilir? normalleştirme için veriler 256'ya bölünür mü? veya? Bu, '1.0f' değerinin normalleştirilmiş bir değerine sahip olmanın hiçbir yolu olmadığı anlamına gelir.

Yanıtlar:


13

Kılavuzdan,

GL_TRUE olarak ayarlanırsa normalleştirilmiş, bir tamsayı biçiminde saklanan değerlerin, erişildiğinde ve bu biçime dönüştürüldüğünde [-1,1] (işaretli değerler için) veya [0,1] (işaretsiz değerler için) aralığına eşleneceğini belirtir. kayan nokta.

Bunu imzasız bir 8 bit tipiyle 0, 0.0f'ye ve 255'in 1.0f'ye eşleyeceği anlamına gelir.


Yani bu 255'e bölündüğü anlamına mı geliyor?
Jonathan

Doğru, imzasız bayt aralığı 0 - 255 arasındadır. Yani 0xFF (255'e eşit) değerini geçtiyseniz, 1.0f alırsınız.
notlesh

7
... Orijinal Zelda'yı hiç oynadın mı? Tutabileceğiniz maksimum yakut miktarı 256 değil 255 idi;)
notlesh

İmzasız baytların sadece 255'e gittiğini biliyorum. Sadece merak ediyordum çünkü GPU'nun iki güçle bölünmesi mantıklı görünüyordu
Jonathan

Benzer bir şey merak ediyordum. Uint_8'den şamandıraya verimli bir dönüşüm olabilir, bu da etraftaki bitleri kaydırmaktan daha fazlasını yapmaz, ama soracak biri değilim ... FPU'lar hakkında daha fazla şey bilen biri araya girebilir mi?
notlesh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.