如何在字节类型数组中分配数据
how to assign data in Byte type array
这是3dcpptutorials光线追踪的一段代码。有人可以向我解释这行代码是如何工作的吗?
据我了解,如果小于 0
,则存储 0
,如果大于 1
,则存储 255
,如果介于两者之间,则value * 255
,类似的东西。我说得对吗?
colorbuffer[2] = Color.r <= 0.0f ? 0 : Color.r >= 1.0 ? 255 : (BYTE)(Color.r * 255);
colorbuffer[1] = Color.g <= 0.0f ? 0 : Color.g >= 1.0 ? 255 : (BYTE)(Color.g * 255);
colorbuffer[0] = Color.b <= 0.0f ? 0 : Color.b >= 1.0 ? 255 : (BYTE)(Color.b * 255);
正确。由于 ?:
运算符的 right-to-left associativity,行
colorbuffer[2] = Color.r <= 0.0f ?
0 : Color.r >= 1.0 ? 255 : (BYTE)(Color.r * 255);
相当于这个:
colorbuffer[2] = Color.r <= 0.0f ?
0 : (Color.r >= 1.0 ? 255 : (BYTE)(Color.r * 255));
这又等同于以下 if-else
块:
if (Color.r <= 0.0f)
colorbuffer[2] = 0;
else {
if (Color.r >= 1.0)
colorbuffer[2] = 255;
else
colorbuffer[2] = (BYTE)(Color.r * 255);
}
标准库中有 std::clamp
函数来完成这种工作:
colorbuffer[2] = (BYTE)(std::clamp(Color.r, 0.f, 1.f) * 255);
这是3dcpptutorials光线追踪的一段代码。有人可以向我解释这行代码是如何工作的吗?
据我了解,如果小于 0
,则存储 0
,如果大于 1
,则存储 255
,如果介于两者之间,则value * 255
,类似的东西。我说得对吗?
colorbuffer[2] = Color.r <= 0.0f ? 0 : Color.r >= 1.0 ? 255 : (BYTE)(Color.r * 255);
colorbuffer[1] = Color.g <= 0.0f ? 0 : Color.g >= 1.0 ? 255 : (BYTE)(Color.g * 255);
colorbuffer[0] = Color.b <= 0.0f ? 0 : Color.b >= 1.0 ? 255 : (BYTE)(Color.b * 255);
正确。由于 ?:
运算符的 right-to-left associativity,行
colorbuffer[2] = Color.r <= 0.0f ?
0 : Color.r >= 1.0 ? 255 : (BYTE)(Color.r * 255);
相当于这个:
colorbuffer[2] = Color.r <= 0.0f ?
0 : (Color.r >= 1.0 ? 255 : (BYTE)(Color.r * 255));
这又等同于以下 if-else
块:
if (Color.r <= 0.0f)
colorbuffer[2] = 0;
else {
if (Color.r >= 1.0)
colorbuffer[2] = 255;
else
colorbuffer[2] = (BYTE)(Color.r * 255);
}
标准库中有 std::clamp
函数来完成这种工作:
colorbuffer[2] = (BYTE)(std::clamp(Color.r, 0.f, 1.f) * 255);