トップページ > 過去ログ > 記事閲覧
徐々に色が変化するグラデーション
名前:レッド 日時: 2008/07/13 17:27

いつもお世話になっております。 このたびも皆さんのお知恵におすがりしたく参りました。 現在、遠くに見える空が夕暮れから徐々に夜空へ 変わっていくという処理を作りたいと考えております。 夕暮れから夜なので、画面の上のほうを黒、 下に行くにつれて赤になっていくという グラデーションをつけたいと考えています。 また、時間の経過に伴いだんだんと 黒の割合が大きくなっていき、最後には 赤い部分がなくなり全て黒にしたいと思います。 そういったグラデーションをつけたいと思うのですが、 どういった手法があるでしょうか。 皆さんのお知恵をお借りしたいと思います。 一応自分で考えた案としては、 上が黒で下が赤のグラデーションで塗りつぶされた かなり長い画像ファイルを前もって準備しておき、 それを時間の経過ごとにゆっくりと 上から下へ下げていくという処理を考えました。 しかしこれだと画像ファイルとして準備した色しか 表現できず、仮に緑から紫へ変わるものが表現できません。 また、画像ファイルをロードし毎回表示するよりも、 図形描画関数を使ったほうが速いのかも、と疑問に感じました。 どのような方法が効率的なのでしょうか。

Page: 1 |

Re: 徐々に色が変化するグラデーション ( No.1 )
名前:f2 日時:2008/07/13 20:54

DrawPolygon3D()を利用して、似たようなことをやろうとしたことがあります。 各頂点の色を、時間の経過とともに変化させていき、画面全体にポリゴンを描画するわけですが、 以下のような問題がありました。 ・2Dの視点から直感的に、(0,0)-(640.0f,480.0f)に描画しようとすると上下左右に隙間ができます。 ・なんらかのテクスチャを指定しないと描画されなかったので、適当に真っ白な画像を指定していました。 ・頂点のAlpha値が反映されてないようでした。 もし何らかの方法でこれらがクリアできるなら、 背景をいろいろ描画した後に、各頂点の色とアルファを設定したポリゴンを一枚、 全画面にちょろっと描画して、綺麗な画面に仕上げたりってことも可能なんじゃないかなっと思いました。
Re: 徐々に色が変化するグラデーション ( No.2 )
名前:管理人 日時:2008/07/15 00:36

一枚画像を描画するよりすこし負荷は高くなりますが、 DrawBox を画面の縦解像度分だけ呼び出してグラデーションを 表現するという方法があります。 (DrawLine はハードによって微妙にずれたりするので DrawBox を 使います) // 画面解像度が 640x480 の場合 // 画面上が黒、下が赤のグラデーション int i; for( i = 0; i < 480; i++ ) { DrawBox( 0, i, 640, i + 1, GetColor( 255 * i / 480, 0, 0 ), TRUE ); } > f2さん DrawPolygon3D は3Dのポリゴンを描画するのが目的なので、 ±1ドットの誤差はあると思います。 そんなときは画面より少し大きめのポリゴンにして頂ければ OKです。 あと、画像を指定する引数に DX_NONE_GRAPH を渡すと テクスチャ無しのポリゴンが描画できます
Re: 徐々に色が変化するグラデーション ( No.3 )
名前:レッド 日時:2008/07/15 11:13

>f2さん、管理人さん ご返信くださりまことにありがとうございます。 早速、これからのプログラミングに お教えいただいたテクニックを実践しようと思います。 特に管理人さんには、サンプルコードまで例示していただき 非常に恐縮でございます。 このような場を用意していただき、いつも感謝しております。

Page: 1 |