Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Opengl将单个值转换为RGB<;0,1>;_C#_Opengl_Colors - Fatal编程技术网

C#Opengl将单个值转换为RGB<;0,1>;

C#Opengl将单个值转换为RGB<;0,1>;,c#,opengl,colors,C#,Opengl,Colors,我需要将单个值转换为C#中的RGB,以便为单个点着色。该值存储在列表中,一个值对应一个点 1) 我从列表中知道最小值和最大值 2) 值的范围可以是任何值,例如:-13、20000、0.000234 3) 红色、绿色和蓝色值必须在范围内。Iam使用glColor3f 如何转换它?没有标准的方法将单个一维值映射到。您基本上是在寻找一种从一维间隔自动生成三维曲线的方法。显然,有无数种方法可以做到这一点 评论者建议使用固定的颜色色度(如红色)并改变其亮度。虽然这可能是最简单的方法,但您显然不想这样做 另

我需要将单个值转换为C#中的RGB,以便为单个点着色。该值存储在列表中,一个值对应一个点

1) 我从列表中知道最小值和最大值

2) 值的范围可以是任何值,例如:-13、20000、0.000234

3) 红色、绿色和蓝色值必须在范围内。Iam使用glColor3f


如何转换它?

没有标准的方法将单个一维值映射到。您基本上是在寻找一种从一维间隔自动生成三维曲线的方法。显然,有无数种方法可以做到这一点

评论者建议使用固定的颜色色度(如红色)并改变其亮度。虽然这可能是最简单的方法,但您显然不想这样做

另一种方法是将值映射到,将实际值映射到,并为饱和度和值选择一些固定值(从最大值开始,如果结果太亮,则调低它们)

因此,算法可能如下所示:

  • 获取最大值和最小值

  • 将最小值映射到色调的最小角度(例如10度),将最大值映射到最大角度(例如350度)。(您需要使用这些边界)

  • 对于列表中的每个值

  • 在最大和最小色调之间插入值:

    var hue = minHue + (maxHue - minHue) * (value - min)/(max - min)
    
  • 给定饱和度和值的固定值(假设每个值从1.0开始),使用以下答案中的代码将它们映射到RGB颜色空间:

  • 上面返回的R、G和B的范围为0-255。根据您的要求,将其规格化为介于0和1之间

  • 如果您熟悉,其颜色选择器工具允许您为给定的S和V值拾取色调(H):


    你所做的工作基本上与从工具中选择颜色相同。

    (val-min)/(max-min)
    其中
    min
    max
    是可能的最小值和最大值。但我需要三个值,R、G和B。如果我使用你的公式来计算每个值,那就没有意义了。不过你只有一个值。只需将转换后的值设置为R,并将G和B保留为零(或者,更好的是,使用只有R通道的纹理格式)。这没有任何意义,因为我无法获得完整的颜色范围。你想做什么?如果您试图在纹理中编码一个值,以便可以在着色器中检索该值,那么这样做很好。如果您只是尝试根据某个值为某个对象着色,有很多方法可以做到这一点。