RGB值从高度编码

时间:2012-04-29 22:54:44

标签: c++ colors rgb

我有一个程序,我需要将高度表示为RGBT(浮点数)值。那就是:

[R, G, B, T (Transperancy)] -> [0.0f-1.0f, 0.0f-1.0f, 0.0f-1.0f, 0.0f-1.0f]

从概念上讲,我知道您可以通过最大和最小高度之间的基本高度进行编码。我甚至有一些greyScale高度编码的代码:

double Heightmin=0;
double Heightmax=23;

osg::Vec4 getColourFromHeight(double height, double alpha=1.0) {

    double r=(height-Heightmin)/Heightmax;
    double b=(height-Heightmin)/Heightmax;
    double g=(height-Heightmin)/Heightmax;
    return osg::Vec4(r, g, b, 1.0);
}

我想知道的是,如果有一个更复杂的算法,那么就像使用R和G一样:

double r=(height-Heightmin)/Heightmax;
double b=0.0f;
double g=(Heightmax- height + Heightmin)/Heightmax;

(也就是说,G是R的倒置形式,因此在低值时它会显得更绿,而在高值时它会显得更红。

我希望能够利用R G和B来提供逼真的高度编码景观:

enter image description here

这是72dpi RGB高度编码地形图的图像。我希望能够得到类似的东西。是否有一种简单的算法可以根据最小和最大密度来创建RGB值?

请求你的帮助。

1 个答案:

答案 0 :(得分:2)

您只需要提供您喜欢的合适颜色渐变,然后将其放入查找表(或类似)中。

然后您需要的是能够映射范围min_height - >范围内的值的内容。 max_height范围0 - > 255(例如)。

当然,您可能会发现可以表示为数学函数的颜色渐变,但这种颜色渐变不太通用。