将浮点数转换为RGB矢量

问题描述 投票:0回答:2

我需要通过opengl渲染几个立方体,每个立方体的颜色取决于立方体中心的磁场,但我不知道如何将浮点数转换为QVector3Dglm::vec3 (RGB)

我可以将浮点数组的范围转换为0到1,我需要知道如何将磁场数组转换为RGB来定义颜色数组。

opengl qt5 colormap
2个回答
2
投票

如果我理解正确,那么你想用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;

0
投票

您需要某种形式的查找表(LUT)。 RGB矢量有3个维度,一个浮点数只有一个。从字面上看,无数种方法如何在这两者之间进行映射。

© www.soinside.com 2019 - 2024. All rights reserved.