我想知道glcolor3b()和之间有什么区别glcolor3ub().
似乎glcolor3b(255, 0, 0);没有将颜色设置为红色,而是将其设置为黑色.glcolor3b(48, 160, 64)将它设置为深紫色,而不是绿色.glcolor3ub()但是按预期工作.
此外,除"u"外,文档glcolor3b()和glcolor3ub()完全相同:
public static void glColor3(u)b(byte red,
byte green,
byte blue)
Run Code Online (Sandbox Code Playgroud)
有谁知道这是为什么?
glColor3b()获取范围为-128到127的字节参数.
glColor3ub()采用无符号字节参数,范围从0到255.使用大于127的值glColor3b()会导致算术溢出.
当然255将其设置为黑色.那是0xff(或0b11111111),使用2的补码有符号的8位数字为-1 ...
-1小于0,您可以认为没有所有颜色.在混合之外,签名的颜色确实没有多大意义.简而言之,这就是这两个函数之间的区别,一个是有符号的,另一个是无符号的.
当您使用glColor3b (...)功能(签名),那么你的范围是-128-127(-128映射到-1.0和127名映射到1.0,0是中点)
当使用glColor3ub (...)功能(未 -signed),该范围是0-255(0映射到0.0和255名映射到1.0).
无论您使用哪种功能,除非它们都是glColor3f (...),它们都进行定点到浮点单位转换.在定点到浮点归一化期间,整数数据类型的范围直接映射在-1.0(有符号)/ 0(无符号)和1.0之间.所述u与非u仅仅表明它们中的一个是无符号的(较大的正范围内).