如何在字节类型数组中分配数据

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);