2

高さを RGBT (float) 値として表す必要があるプログラムがあります。あれは:

[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 を利用して、リアルな外観の高さでエンコードされたランドスケープを提供できるようにしたいと考えています。

ここに画像の説明を入力

これは、72dpi RGB 高さエンコードされた地形図の画像です。これに似たものを達成できるようにしたいと思います。最小高さと最大高さに基づいて RGB 値を作成する簡単なアルゴリズムはありますか?

助けてくれてありがとう。

ベン

4

1 に答える 1

2

好みの適切なカラーグラデーションを考え出し、それをルックアップテーブル(または同様のもの)に配置するだけです。

次に必要なのは、範囲->の値を範囲->にマップするものです(min_heightたとえばmax_height)。0255

もちろん、数学関数として表現できるカラーグラデーションを見つけることは可能ですが、それはそれほど一般的ではありません。

于 2012-04-29T23:02:52.883 に答える