การฟื้นฟูมาตรฐาน glVertexAttribPointer


11

glVertexAttribPointer (ดัชนี, ขนาด, ประเภท, ปกติ, ก้าว, ตัวชี้);

ถ้าฉันใช้ type = GL_UNSIGNED_BYTE และทำให้ปกติ = GL_TRUE

มันเป็นมาตรฐานได้อย่างไร ข้อมูลจะถูกหารด้วย 256 สำหรับการทำให้เป็นมาตรฐานหรือไม่ หรือ? นี่หมายความว่าไม่มีทางที่จะมีค่าปกติที่ '1.0f'

คำตอบ:


13

จากคู่มือ

หากตั้งค่าเป็น GL_TRUE การทำให้เป็นมาตรฐานจะระบุว่าค่าที่เก็บในรูปแบบจำนวนเต็มจะถูกแมปกับช่วง [-1,1] (สำหรับค่าที่ลงชื่อ) หรือ [0,1] (สำหรับค่าที่ไม่ได้ลงชื่อ) เมื่อพวกเขาเข้าถึงและแปลงเป็น จุดลอย

ฉันหมายความว่าด้วยประเภท 8 บิตที่ไม่ได้ลงนาม 0 จะแมปกับ 0.0f และ 255 จะจับคู่กับ 1.0f


นั่นหมายความว่ามันหารด้วย 255?
Jonathan

ไบต์ที่ไม่ได้ลงนามมีช่วงตั้งแต่ 0 - 255 ดังนั้นถ้าคุณผ่าน 0xFF (ซึ่งเท่ากับ 255) คุณจะได้ 1.0f
notlesh

7
... คุณเคยเล่น Zelda ดั้งเดิมหรือไม่? จำนวนทับทิมสูงสุดที่คุณสามารถถือได้คือ 255 ไม่ใช่ 256;)
ไม่ใช่เนื้อ

ฉันรู้ว่าไบต์ที่ไม่ได้ลงนามเท่านั้นไปที่ 255 .. ฉันแค่สงสัยเพราะมันดูเหมือนว่าตรรกะสำหรับ GPU ที่จะหารด้วยพลังแห่งสอง
Jonathan

ฉันสงสัยในสิ่งที่คล้ายกัน อาจมีการแปลงที่มีประสิทธิภาพจาก uint_8 ถึงการลอยที่ไม่ได้ทำอะไรมากไปกว่าการเปลี่ยนบิต แต่ฉันไม่ใช่คนที่ขอ ...
notlesh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.