我需要通过opengl渲染几个立方体,每个立方体的颜色取决于立方体中心的磁场,但我不知道如何将浮点数转换为QVector3D
或glm::vec3 (RGB)
。
我可以将浮点数组的范围转换为0到1,我需要知道如何将磁场数组转换为RGB来定义颜色数组。
如果我理解正确,那么你想用RGB颜色表示[0.0,1.0]范围内的浮点值。 我建议将值转换为HSV颜色范围。
对于整个范围,转换是:
float value = ...; // value in range [0.0, 1.0]
float H = value;
float R = fabs(H * 6.0f - 3.0f) - 1.0f;
float G = 2.0f - fabs(H * 6.0f - 2.0f);
float B = 2.0f - fabs(H * 6.0f - 4.0f);
glm::vec3 color(
std::max(0.0, std::min(1.0, R))
std::max(0.0, std::min(1.0, G))
std::max(0.0, std::min(1.0, B)));
如果你不想要全范围,例如,如果你想使用从红色到蓝色的范围,那么必须缩放value
:
float H = value * 2.0f/3.0f;
您需要某种形式的查找表(LUT)。 RGB矢量有3个维度,一个浮点数只有一个。从字面上看,无数种方法如何在这两者之间进行映射。