C#Opengl将单个值转换为RGB<;0,1>;
我需要将单个值转换为C#中的RGB,以便为单个点着色。该值存储在列表中,一个值对应一个点 1) 我从列表中知道最小值和最大值 2) 值的范围可以是任何值,例如:-13、20000、0.000234 3) 红色、绿色和蓝色值必须在范围内。Iam使用glColor3fC#Opengl将单个值转换为RGB<;0,1>;,c#,opengl,colors,C#,Opengl,Colors,我需要将单个值转换为C#中的RGB,以便为单个点着色。该值存储在列表中,一个值对应一个点 1) 我从列表中知道最小值和最大值 2) 值的范围可以是任何值,例如:-13、20000、0.000234 3) 红色、绿色和蓝色值必须在范围内。Iam使用glColor3f 如何转换它?没有标准的方法将单个一维值映射到。您基本上是在寻找一种从一维间隔自动生成三维曲线的方法。显然,有无数种方法可以做到这一点 评论者建议使用固定的颜色色度(如红色)并改变其亮度。虽然这可能是最简单的方法,但您显然不想这样做 另
如何转换它?没有标准的方法将单个一维值映射到。您基本上是在寻找一种从一维间隔自动生成三维曲线的方法。显然,有无数种方法可以做到这一点 评论者建议使用固定的颜色色度(如红色)并改变其亮度。虽然这可能是最简单的方法,但您显然不想这样做 另一种方法是将值映射到,将实际值映射到,并为饱和度和值选择一些固定值(从最大值开始,如果结果太亮,则调低它们) 因此,算法可能如下所示:
var hue = minHue + (maxHue - minHue) * (value - min)/(max - min)
你所做的工作基本上与从工具中选择颜色相同。
(val-min)/(max-min)
其中min
和max
是可能的最小值和最大值。但我需要三个值,R、G和B。如果我使用你的公式来计算每个值,那就没有意义了。不过你只有一个值。只需将转换后的值设置为R,并将G和B保留为零(或者,更好的是,使用只有R通道的纹理格式)。这没有任何意义,因为我无法获得完整的颜色范围。你想做什么?如果您试图在纹理中编码一个值,以便可以在着色器中检索该值,那么这样做很好。如果您只是尝试根据某个值为某个对象着色,有很多方法可以做到这一点。