2012-06-20 23 views
5

手続き上の空をレンダリングする必要があるアプリケーションを開発しています。これは、の空の時刻は、シミュレーション内でOpenGLでのスカイボックスの手続き/動的な色付け

私は彼らがこのよう カラーマップ sushを持ってどこかに過去の方法見てきました

enter image description hereenter image description here

は今、このような時、何とかコード画像の上にスキャンおよび用途として、いくつかの変数に応じて空の質感の色の範囲。また日の出/日の入りの間にコードは、右側のように黄色、橙色、赤色にスキャンされます。

私はこれが何と呼ばれているか分かりませんが、私はそれが私の後ろだと思います。誰かが私を見せてくれるか、openglとC++でこのテクニックを使った例を教えてくれるのなら大好きです。側では

は私の スカイボックスはあなたの平均的な形状ではないことに注意してその 空へのトップありませんあなたが見ることができるように enter image description here

以下のようにスカイ直角のより-right-angle空がレンダリングされるのは、青色の2面だけです(黒はBGです)。私は、これらの2つの平原に手続き的/動的な夜の空を描くことができる方法があれば疑問に思っていました。(また、継ぎ目も目立ちませんでした。)また、副次的な疑問もあるので平野の頂点は消えますアルファに関係なくそれにその

のOpenGL/C++にテクスチャとして設定し、その後カラーマップをスキャンする方法上の任意の説明/例は大歓迎です。

+2

クローズアップに投票した人に:これは実際には興味深い質問であり、トピックも不明でもありません。それは難しい話題です。残念ながら、私は今話を準備しなければなりません。さもなければ、私は多層テラヘルツのグラデーションの構成(このテクスチャが使用されるものです)を説明することができます。 – datenwolf

+1

@datenwolfおそらく、あなたはこのトピックで数日後に再び来ることができました。私は、よく教育された答えに感謝する私のような人がいると確信しています。 – s3rius

答えて

1

は、C++のソースが利用できないですが、シェーダーソースがあるhttp://golabistudio.com/siamak/portfolio.html
このURLの最後のプロジェクト(特殊効果)をダウンロードしてください。
あなたがする必要があることは、シェーダに2つのテクスチャを渡すことです(プレーンをレンダリング中)。最初のテクスチャは標準のスカイボックステクスチャです。 2番目のテクスチャは、昼/夜のサイクルテクスチャです。一番簡単なのは、高さ1の広い勾配のテクスチャで、青から暗になります。この2番目のテクスチャをシェーダに渡すと、x = timeの位置で1ピクセルを取り出し、拡散したテクスチャ(最初のテクスチャ)に色を追加できます。

次のステップは日の出です。もう一度これを行うのが最も簡単です。幅2のテクスチャを作成する必要があります。幅2のテクスチャを作成し、日の出ピクセルを水平に、別のものを夜景のグラデーションにする必要があります。あなたが次のようにする拡散テクスチャ(最初のスカイボックステクスチャ)

float2 uvpos; 
    uvpos.y = IN.uv.y;//the position same as skybox texture 
    uvpos.x = 0;//a sample from first horizontal pixel 
    float4 colour1 = tex2D(gradientTexture, uvpos); 
    uvpos.x = 0.5;//a sample from second horizontal pixel 
    float4 colour2 = tex2D(gradientTexture, uvpos); 

    float4 skycolor = lerp(colour1 , colour2, (your day time)); 
    skycolor.xyz += tex2D(skyTexture, IN.uv).xyz; 

これは非常に単純な実装ですが、私は思うようになるはずです。

関連する問題