トップページ > 過去ログ > 記事閲覧
色相を変える方法
名前:チルチル 日時: 2011/06/21 17:57

いつもお世話になっています 画像編集ソフトの色相シフト機能を見ていて これをゲームに使えれば綺麗かなと思ったんですけど 元の画像が単色なら白い画像を用意して輝度を R:255,G: 0,B: 0 ↓ R:255,G:128,B: 0 ↓ R:255,G:255,B: 0 ↓ R: 0,G:255,B: 0 ↓ R: 0,G:128,B: 0 ↓ R: 0,G: 0,B:255 ↓ R:128,G: 0,B:255 のように変化させれば 七色に変化させる事ができたんですが もともと七色のグラデーションが付いた画像を色相シフトしようと思うと どうしたら実現できるかわかりません 何か良い方法は無いでしょうか? あと、色相シフトが可能だとすれば 他にも彩度・明度・コントラストなども 変更することは可能でしょうか?

Page: 1 |

Re: 色相を変える方法 ( No.1 )
名前:いっち 日時:2011/06/21 22:41

色相シフトというのはおそらく、色を HSV で表現したときの H を加減算することだと思いますが、 ソフトイメージかピクセルシェーダーを利用すれば実現できるのではないでしょうか。 また、DXライブラリには HSV を扱う機能が無いので、RGB と HSV の相互変換は自前で実装する必要があります。
Re: 色相を変える方法 ( No.2 )
名前:チルチル 日時:2011/06/22 21:01

ああ、なるほど HSVを変化させれば明度や彩度も変えられそうですね DXライブラリでHSVを扱えないのは残念ですが ピクセルシェーダーは使った事が無いので どういうものかわからないです ちょっと調べてみると 「ピクセルシェーダー」というのはハードウェアの事みたいですけど この機能を利用するにはどうすれば良いんでしょうか? ソフトイメージの方はDXライブラリでも扱えるみたいですが ソフトイメージを通常のグラフィックに変換する処理は重いので ゲームのように速く描画しないといけない場合は ちょっと無理ではないでしょうか
Re: 色相を変える方法 ( No.3 )
名前:いっち 日時:2011/06/23 19:50

> この機能を利用するにはどうすれば良いんでしょうか? シェーダーについては、以下のスレッドに記述があります。 > h t t p ://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=1643 > h t t p ://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2083 > h t t p ://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2142 HLSLの公式リファレンス(?) > h t t p ://msdn.microsoft.com/ja-jp/library/ee418149(v=vs.85).aspx その他にも "HLSL" 等で検索すると情報が得られると思います。 > ゲームのように速く描画しないといけない場合はちょっと無理ではないでしょうか わかりません。前提条件や求めるクオリティによります。
Re: 色相を変える方法 ( No.4 )
名前:チルチル 日時:2011/06/24 22:02

なるほど少しわかってきました HLSLという言語で実行ファイルを作って ゲームの実行ファイルから呼び出すんですね となるとシェーダの方も 同じ場所に置いておかないといけないんでしょうか? というよりHLSLはDirectXより高度な言語みたいですけど DirectXが使えなくても大丈夫でしょうか・・? ソフトウェアイメージは できれば100ぐらい一度に表示したいですけど それが無理なら1個でも良いんですが だとしても毎フレーム通常のグラフィックに変換するので 60FPSは維持できないと思います だとすればHLSLを使うしかないんでしょうか?
Re: 色相を変える方法 ( No.5 )
名前:いっち 日時:2011/06/24 23:30

リンクを張り忘れていましたが、グレースケール変換と色相シフトは両者共にピクセルごとの計算が必要という点で(たぶん)一致しているので、 管理人さんの見解が本件にもそのまま当てはまると思います。 > h t t p://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2276 > 同じ場所に置いておかないといけないんでしょうか? > というよりHLSLはDirectXより高度な言語みたいですけどDirectXが使えなくても大丈夫でしょうか・・? リンク先にサンプルもあるのでご自身で試してみてはいかがでしょうか?
Re: 色相を変える方法 ( No.6 )
名前:管理人 日時:2011/06/26 16:53

いっちさんのご返答に無い部分だけご返答します > ソフトウェアイメージは > できれば100ぐらい一度に表示したいですけど > それが無理なら1個でも良いんですが > だとしても毎フレーム通常のグラフィックに変換するので > 60FPSは維持できないと思います 表示されたいイメージのサイズに寄ります 一つのイメージの面積が 16x16 くらいでしたら 60FPSS を維持しながらソフトウエアイメージ 100 個を 色相変化をさせつつグラフィックハンドルに変換して描画することは可能かもしれませんが、 640x480 の画像を 100 となると確かに 60FPS を維持するのは難しいのでピクセルシェーダーを使うしかないと思います
Re: 色相を変える方法 ( No.7 )
名前:チルチル 日時:2011/06/26 21:44

≫://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2276 そういえばソフトウェアイメージでアルファチャンネルも扱うことができますね ということは 最初にLoadSoftImage関数で元画像を読み込んで GetPixelSoftImage関数で1ピクセルずつ取得して 色相を変える計算をして求めた値を MakeARGB8ColorSoftImage関数で作った画面に DrawPixelSoftImage関数で1ピクセルずつ描画して CreateGraphFromSoftImage関数でグラフィックにして 裏画面に描画して DeleteGraph関数でグラフィックを解放する というような流れで実装できそうですね ≫://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=1643 PixelShaderTest.exeを実行しても何も表示されなかったので GetValidShaderVersion関数で調べてみたら 0が返ってきたので 私の環境ではシェーダが使えないようです 製作環境で使えないようではどうにもならないので シェーダは無理みたいですね

Page: 1 |