glcolor3b和glcolor3ub之间的区别

The*_*Hat 5 java opengl lwjgl

我想知道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)

有谁知道这是为什么?

gre*_*r89 6

glColor3b()获取范围为-128127的字节参数. glColor3ub()采用无符号字节参数,范围从0255.使用大于127的值glColor3b()会导致算术溢出.


And*_*man 5

当然255将其设置为黑色.那是0xff(或0b11111111),使用2的补码有符号的8位数字为-1 ...

-1小于0,您可以认为没有所有颜色.在混合之外,签名的颜色确实没有多大意义.简而言之,这就是这两个函数之间的区别,一个是有符号的,另一个是无符号的.

当您使用glColor3b (...)功能(签名),那么你的范围是-128-127(-128映射到-1.0127名映射到1.0,0是中点)

当使用glColor3ub (...)功能( -signed),该范围是0-255(0映射到0.0255名映射到1.0).

无论您使用哪种功能,除非它们都是glColor3f (...),它们都进行定点到浮点单位转换.在定点到浮点归一化期间,整数数据类型的范围直接映射在-1.0(有符号)/ 0(无符号)和1.0之间.所述u与非u仅仅表明它们中的一个是无符号的(较大的正范围内).