2012-04-29 2 views
2

У меня есть программа, где мне нужно представить высоту как значение RGBT (в поплавке). То есть:Значение RGB, закодированное с высоты

[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, поэтому при низких значениях она будет выглядеть более зеленой, а при высоких значениях она будет более красной.

Я хотел был бы использовать RG и B, чтобы дать реалистичный вид hieght закодированные пейзажи:

enter image description here

Это изображение топовой карты с кодировкой высоты RGB высотой 72dpi. Я хотел бы иметь возможность достичь чего-то подобного. Существует ли простой алгоритм для создания значения RGB на основе минимального и максимального значений?

Thaks для вашей помощи.

Бен

+0

Вам просто нужно подобрать подходящий [цветной градиент] (https://www.google.co.uk/search?hl=ru&safe=off&q=colour%20gradient&um=1&ie=UTF-8&tbm=isch&source=og&sa = N & tab = wi & ei = EMedT4OxJc7e8QPTsam8BQ & biw = 1600 & bih = 775 & sei = E8edT62BB4b98QOi5pmZDw), который вам нравится, а затем поместите его в таблицу поиска (или аналогичную). –

+0

Это звучит неплохо, но будет ли это целесообразно, если учитывать максимальную и минимальную высоту в конечном коде? –

+0

Вы уверены, что это изображение кодируется только по высоте? Мне кажется, что это сочетание географических и топографических данных. –

ответ

2

Вам просто нужно придумать подходящий цвет градиент, который вам нравится, а затем положить его в справочной таблице (или аналогичной).

Тогда все, что вам нужно что-то, что будет отображать значение в диапазоне min_height ->max_height в диапазоне 0 ->255 (к примеру).

Конечно, возможно, что вы найдете градиент цвета, который может быть выражен как математические функции, но это менее общий.

+0

Я надеялся на более общее решение проблемы. Но это то, что я попробую. –

+0

@Ben: Тогда на что ты надеялся? –

+0

Честно говоря, что-то похожее на уравнение, заданное для кодировки высоты серого цвета. Но включение всех цветов в красивый ландшафт. Я понимаю, что такого рода вещи могут не существовать, я в настоящее время реализую вашу идею, так как это так же, как это делается в Matlab (не то, что это ваш совет не был достаточно хорош, только кто-то на работе сообщил мне также). Я просто надеялся, что это будет немного проще. –

Смежные вопросы