2

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

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

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

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 的倒置形式,所以在低值时它会显得更绿,而在高值时它会显得更红。

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

在此处输入图像描述

这是一张 72dpi RGB 高度编码的地形图的图像。我希望能够实现类似的目标。是否有一种简单的算法可以根据最小和最大高度创建 RGB 值?

谢谢你的帮助。

4

1 回答 1

2

你只需要想出一个你喜欢的合适的颜色渐变,然后把它放在一个查找表(或类似的)中。

那么您所需要的就是将范围 -> 中的值映射min_heightmax_height范围0->中的东西255(例如)。

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

于 2012-04-29T23:02:52.883 回答