私はランダムな生成(およびランダムな色)が好きなので、両方を組み合わせて、単純な2Dランドスケープジェネレーターを作成することにしました。私の考えは、ブロックの高さに応じて(そうです、地形はブロックでできています)、ブロックを明るくしたり暗くしたりします。上部に最も近いものは明るく、下部に向かっては暗くなります。グレースケールで動作させましたが、RGB値の比率などが使用できないように見えるため、ベースRGBカラーを実際に使用して明るくすることはできません。解決?HSL。またはおそらくHSV、正直なところ、私はまだ違いを知りません。私はH0-360、S&V / L=0-100を参照しています。でも...まあ、360 = 0なので、360の値ですが、実際に0-100の場合、それは101です。実際には0-359と1-100(または0-99?)ですが、色の選択編集者(現在GIMPを参照しています...
とにかく、HSL-> RGB変換の式を見つけました(こことここ。私が知る限り、最終的な式は同じですが、それでもコードを提供します(これは後者のeasyrgb.comリンクからのものであることに注意してください) :
Hue_2_RGB
float Hue_2_RGB(float v1, float v2, float vH) //Function Hue_2_RGB
{
if ( vH < 0 )
vH += 1;
if ( vH > 1 )
vH -= 1;
if ( ( 6 * vH ) < 1 )
return ( v1 + ( v2 - v1 ) * 6 * vH );
if ( ( 2 * vH ) < 1 )
return ( v2 );
if ( ( 3 * vH ) < 2 )
return ( v1 + ( v2 - v1 ) * ( ( 2 / 3 ) - vH ) * 6 );
return ( v1 );
}
および他のコード:
float var_1 = 0, var_2 = 0;
if (saturation == 0) //HSL from 0 to 1
{
red = luminosity * 255; //RGB results from 0 to 255
green = luminosity * 255;
blue = luminosity * 255;
}
else
{
if ( luminosity < 0.5 )
var_2 = luminosity * (1 + saturation);
else
var_2 = (luminosity + saturation) - (saturation * luminosity);
var_1 = 2 * luminosity - var_2;
red = 255 * Hue_2_RGB(var_1, var_2, hue + ( 1 / 3 ) );
green = 255 * Hue_2_RGB( var_1, var_2, hue );
blue = 255 * Hue_2_RGB( var_1, var_2, hue - ( 1 / 3 ) );
}
申し訳ありませんが、それらの空白を修正する良い方法がわかりません。
H、S、Lの値を自分の名前、色相、彩度、明度に置き換えました。振り返ってみましたが、足りないものがない限り正しく交換しました。ただし、hue_2_RGB関数は、C ++に必要な部分を除いて、完全に編集されていません。(例:変数タイプ)。私はまた、すべてのint(R、G、B、H、S、L)を持っていましたが、それが私に起こりました... HSLは数式の浮動小数点でした-または、少なくとも、そうあるべきだと思われます。そこで、変数(var_1、var_2、すべてのv、R、G、B、色相、彩度、明度)をフロートに使用しました。だから私はそれがここでのある種のデータ損失エラーであるとは信じていません。さらに、数式を入力する前に、色相/ = 360、彩度/ = 100、明度/ = 100があります。その前に、色相= 59、彩度= 100、明度=70があることに注意してください。 0-1を確保するために360として正しい色相、
だから、私の質問は、なぜ式が機能しないのですか?あなたが助けることができればありがとう。
編集:質問が明確でない場合は、コメントしてください。