bình thường hóa glVertexAttribPulum


11

glVertexAttribPulum (chỉ mục, kích thước, loại, chuẩn hóa, sải chân, con trỏ);

Nếu tôi sử dụng loại = GL_UNSIGNED_BYTE và được chuẩn hóa = GL_TRUE

nó được chuẩn hóa như thế nào? dữ liệu sẽ được chia cho 256 để chuẩn hóa? hoặc là? Điều này có nghĩa là không có cách nào để có giá trị chuẩn hóa là '1.0f' ..

Câu trả lời:


13

Từ hướng dẫn,

Nếu được đặt thành GL_TRUE, chuẩn hóa cho biết các giá trị được lưu trữ ở định dạng số nguyên sẽ được ánh xạ tới phạm vi [-1,1] (đối với các giá trị đã ký) hoặc [0,1] (đối với các giá trị không dấu) khi chúng được truy cập và chuyển đổi thành điểm nổi.

Tôi hiểu điều đó có nghĩa là, với loại 8 bit không dấu, 0 sẽ ánh xạ tới 0,0f và 255 sẽ ánh xạ tới 1.0f.


Vậy có nghĩa là nó được chia cho 255?
Jonathan

Phải, byte không dấu có phạm vi 0 - 255. Vì vậy, nếu bạn vượt qua 0xFF (bằng 255), bạn sẽ nhận được 1.0f.
thịt

7
... Bạn đã bao giờ chơi Zelda gốc chưa? Số lượng hồng ngọc tối đa bạn có thể giữ là 255, không phải 256;)
thịt

Tôi biết rằng các byte không dấu chỉ chuyển đến 255 .. Tôi chỉ tự hỏi bởi vì có vẻ logic để GPU chia cho một sức mạnh hai
Jonathan

Tôi đã tự hỏi một cái gì đó tương tự. Có thể có một chuyển đổi hiệu quả từ uint_8 sang float mà không làm được gì nhiều ngoài việc dịch chuyển các bit xung quanh, nhưng tôi không phải là người hỏi ... Ai đó biết nhiều hơn về FPU có thể kêu vang?
thịt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.