5

私は手続き型の空をレンダリングする必要があるアプリケーションを開発しています。これは、がシミュレーション内の時間に応じて変化する昼夜のサイクルを持っていることを意味します。

過去のどこかで、次のようなカラーマップsush を持つメソッドを見たことがあります。ここに画像の説明を入力ここに画像の説明を入力

時間などの変数に応じて、コードは画像をスキャンし、空のテクスチャにさまざまな色を使用します。また、日の出/日没時に、コードは右のように黄色、オレンジ、赤色にスキャンされます。

これが何と呼ばれているのかはわかりませんが、それが私が求めているものだと思います。この手法を opengl と C++ で使用する例を誰かに見せてもらったり、指摘してもらったりしていただければ幸いです。

余談ですが、私のスカイボックスはあなたの平均的な形ではなく、以下 のように直角ですここに画像の説明を入力

ご覧のとおり、直角の空には頂点がなく、空がレンダリングされるのは 2 つの青い側面のみです (黒は BG)。これらの 2 つの平野で手続き型/動的な夜空をレンダリングできる方法があるかどうか疑問に思っていました (それらの間の継ぎ目も目立たずに)。昼夜を問わずアルファ

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

4

1 に答える 1

1

このURLの最後のプロジェクト(特殊効果)をダウンロードしますhttp://golabistudio.com/siamak/portfolio.html
c ++ソースは利用できませんが、シェーダーソースはあります。
あなたがする必要があるのは、2つのテクスチャをシェーダーに渡すことです(平面をレンダリングしている間)。最初のテクスチャは、標準のスカイボックステクスチャです。2番目のテクスチャは、昼/夜のサイクルテクスチャです。最も単純な場合は、高さ1の広いグラデーションテクスチャで、青から暗になります。この2番目のテクスチャがシェーダーに渡されると、x = timeの位置でそのピクセルから1ピクセルをピックアップし、拡散テクスチャ(最初のテクスチャ)に色を追加できます。

次のステップは日の出を迎えることです。繰り返しますが、これを行うのが最も簡単な方法では、片側が水平方向に日の出ピクセル、もう片側が夜のグラデーションで幅2のテクスチャを作成する必要があります:(幅を拡大) http://i.imgur.com/Rl8XJ.png

これで、ディフューズテクスチャ(最初のスカイボックステクスチャ)の入力UV座標が得られ、次のようになります。

  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;

これは非常に単純な実装ですが、うまくいくはずです。

于 2012-07-12T21:58:33.063 に答える