我有一个程序,我需要将高度表示为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来提供逼真的高度编码景观:
这是72dpi RGB高度编码地形图的图像。我希望能够得到类似的东西。是否有一种简单的算法可以根据最小和最大密度来创建RGB值?
请求你的帮助。
本
答案 0 :(得分:2)
您只需要提供您喜欢的合适颜色渐变,然后将其放入查找表(或类似)中。
然后您需要的是能够映射范围min_height
- >范围内的值的内容。 max_height
范围0
- > 255
(例如)。
当然,您可能会发现可以表示为数学函数的颜色渐变,但这种颜色渐变不太通用。