ページ 1 / 1
マスクについて
Posted: 2012年8月05日(日) 16:47
by パラダイス
こんにちは、シューティングゲームを作ろうと思って最近DXライブラリを使ってプログラミングを学び始めました初心者です。
質問なのですが、
「東方紅魔郷」の体験版から画像を抽出してみたところ、普通の立ち絵の他に、その立ち絵の白黒バージョンの画像があったり、弾やキャラチップの画像にも、それと同じ白黒バージョンの画像があったりしました。
これってマスク用の画像ですか?
態々マスクを使わなくても画像に透過処理を賭ければマスクを使う必要って無くないですか?マスク機能というものがどういう時に使われるのか分かりません。
Re: マスクについて
Posted: 2012年8月05日(日) 16:49
by softya(ソフト屋)
ダメージ・フラシュ等で使われる可能性があります。
一瞬白くなるやつですね。
【補足】
DXライブラリではマスク処理は内部でやってくれます。
あと白くフラッシュするための処理もあります。
Re: マスクについて
Posted: 2012年8月05日(日) 17:00
by パラダイス
あーなるほど、そうだったのですか・・・
>>DXライブラリではマスク処理は内部でやってくれます。
というのはつまり・・・マスク用の画像を用意せずともマスク処理は可能ってことですか?
>>あと白くフラッシュするための処理もあります。
画像の色を白にする関数ですか?
例でいえば、画像の輝度を設定するSetDrawBright()のような・・・
何もわからずすみません。
Re: マスクについて
Posted: 2012年8月05日(日) 17:27
by softya(ソフト屋)
パラダイス さんが書きました:あーなるほど、そうだったのですか・・・
>>DXライブラリではマスク処理は内部でやってくれます。
というのはつまり・・・マスク用の画像を用意せずともマスク処理は可能ってことですか?
アルファチャンネルだけでなく、bmpだと(0,0,0)を透明として扱えますよね?
SetTransColor()で変更できますが。
あれも一種のマスク処理です(内部では透明色で実現しているはず)。
パラダイス さんが書きました:
>>あと白くフラッシュするための処理もあります。
画像の色を白にする関数ですか?
例でいえば、画像の輝度を設定するSetDrawBright()のような・・・
何もわからずすみません。
SetDrawBright()で大抵事は足りるはずですが、SetDrawBlendMode()でカラー演算するという手もあります(反転+加算)。
【補足】GraphFilter()でシェーダー処理という手もあります。
Re: マスクについて
Posted: 2012年8月05日(日) 22:41
by パラダイス
>>アルファチャンネルだけでなく、bmpだと(0,0,0)を透明として扱えますよね?
前に黒で書いた絵をbmpで保存してテスト表示させてみたところ、所々線が切れてたことがあります。
DXライブラリの仕様で透過されてただけだったんですね。てっきりプログラムや環境、それか絵自体が悪かったのかと思ってました。
>>SetDrawBlendMode()でカラー演算するという手もあります(反転+加算)。
そんなことできたんですね、考えてもみませんでした・・・
でも下の効果で画像を表示してみたところ、ちょっと明るくなるだけで真っ白になるということはありませんでした。
コード:
SetDrawBlendMode( DX_BLENDMODE_INVSRC + DX_BLENDMODE_ADD, 255 );
DrawGraph( 0, 0, "Test.png", TRUE );
完全な白になるまでフラッシュをさせるにはカラー演算するよりもSetDrawBright()、またはGraphFilter()を使うべきですかね?
Re: マスクについて
Posted: 2012年8月05日(日) 22:50
by softya(ソフト屋)
パラダイス さんが書きました:>>アルファチャンネルだけでなく、bmpだと(0,0,0)を透明として扱えますよね?
前に黒で書いた絵をbmpで保存してテスト表示させてみたところ、所々線が切れてたことがあります。
DXライブラリの仕様で透過されてただけだったんですね。てっきりプログラムや環境、それか絵自体が悪かったのかと思ってました。
>>SetDrawBlendMode()でカラー演算するという手もあります(反転+加算)。
そんなことできたんですね、考えてもみませんでした・・・
でも下の効果で画像を表示してみたところ、ちょっと明るくなるだけで真っ白になるということはありませんでした。
コード:
SetDrawBlendMode( DX_BLENDMODE_INVSRC + DX_BLENDMODE_ADD, 255 );
DrawGraph( 0, 0, "Test.png", TRUE );
完全な白になるまでフラッシュをさせるにはカラー演算するよりもSetDrawBright()、またはGraphFilter()を使うべきですかね?
いえ、2回描画します。
コード:
SetDrawBlendMode( DX_BLENDMODE_INVSRC, 255 );
DrawGraph( 0, 0, "Test.png", TRUE );
etDrawBlendMode( DX_BLENDMODE_ADD, 255 );
DrawGraph( 0, 0, "Test.png", TRUE );
これでどうしょうか?
まぁ描画コストがかかるのであんまりよろしくないとは思います。
Re: マスクについて
Posted: 2012年8月05日(日) 23:36
by パラダイス
白くなりました、演算って普通に足しあう訳じゃなかったんですねorz
とりあえずマスクについての疑問は解けましたんで解決にします、ありがとうございました。