【问题标题】:Convert a floating point number to RGB vector将浮点数转换为 RGB 向量
【发布时间】:2023-04-09 07:43:02
【问题描述】:

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

而且我可以在0到1之间转换float数组的范围,我需要知道如何将磁场数组转换为RGB来定义颜色数组。

【问题讨论】:

标签: opengl qt5 colormap


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您需要某种形式的查找表 (LUT)。一个 RGB 向量有 3 个维度,一个浮点数只有一个。在这两者之间进行映射的方式确实有无数种。

    【讨论】:

      猜你喜欢
      • 2013-11-12
      • 2019-09-09
      • 2019-05-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      相关资源
      最近更新 更多