C++ 从高度编码的RGB值
我有一个程序,需要将高度表示为RGBT(浮点)值。即:C++ 从高度编码的RGB值,c++,colors,rgb,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] 从概念上讲,我知道可以通过最大高度和最小高度之间的基本高度进行编码。我甚至有一些用于灰度高度编码的代码: double Heightmin=0; double Heightmax=23; osg::Vec4 getColourFromHeight(double height, do
[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的倒转形式,因此在低值时,G将显示为更多的绿色,在高值时,G将显示为更多的红色
我希望能够利用RG和B提供逼真的高度编码景观:
这是一张72dpi RGB高度编码地形图的图像。我希望能够实现类似的效果。是否有一个简单的算法来创建基于最小和最大高度的RGB值
谢谢你的帮助
Ben你只需要想出一个你喜欢的合适的颜色渐变,然后把它放在一个查找表中(或类似的) 然后,您所需要的就是将范围
min\u height
->max\u height
中的值映射到范围0
->255
(例如)
当然,您可能会找到可以用数学函数表示的颜色渐变,但这不太一般。您只需要找到一个您喜欢的合适颜色渐变,然后将其放入查找表(或类似表格)。这听起来是个好主意,但考虑到最终代码中的最大和最小高度将发生变化,这是否合适?你确定该图像仅进行高度编码吗?在我看来,这似乎是地理和地形数据的组合。这不是我工作的图像,我希望通过显示哪种类型来澄清问题当然是我想要的。不过你说得对,水显示为蓝色等。我希望这个问题有一个更普遍的解决方案。但这是我会尝试的。@Ben:那你希望得到什么样的东西呢?老实说,类似于灰度高度编码的方程式。但是合并了所有的颜色以使它看起来更漂亮地形。我知道这类事情可能不存在,我目前正在实现你的想法,因为这也是在matlab中实现的(并不是因为你的建议不够好,只是工作人员也通知了我)。我只是希望它能简单一点。如果你只有高度信息,这还不足以生成一个漂亮的自然颜色的地形图像。你需要额外的信息,如植被、湿度等…来推导。对于高度,你只能通过颜色梯度函数将给定的颜色指定给高度在上。我设法从matlabs颜色列表中窃取了查找表。我已经实现了这一点,它看起来很好,感谢您的帮助。