マスクについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
パラダイス

マスクについて

#1

投稿記事 by パラダイス » 13年前

こんにちは、シューティングゲームを作ろうと思って最近DXライブラリを使ってプログラミングを学び始めました初心者です。

質問なのですが、
「東方紅魔郷」の体験版から画像を抽出してみたところ、普通の立ち絵の他に、その立ち絵の白黒バージョンの画像があったり、弾やキャラチップの画像にも、それと同じ白黒バージョンの画像があったりしました。
これってマスク用の画像ですか?

態々マスクを使わなくても画像に透過処理を賭ければマスクを使う必要って無くないですか?マスク機能というものがどういう時に使われるのか分かりません。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: マスクについて

#2

投稿記事 by softya(ソフト屋) » 13年前

ダメージ・フラシュ等で使われる可能性があります。
一瞬白くなるやつですね。

【補足】
DXライブラリではマスク処理は内部でやってくれます。
あと白くフラッシュするための処理もあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

パラダイス

Re: マスクについて

#3

投稿記事 by パラダイス » 13年前

あーなるほど、そうだったのですか・・・

>>DXライブラリではマスク処理は内部でやってくれます。
というのはつまり・・・マスク用の画像を用意せずともマスク処理は可能ってことですか?

>>あと白くフラッシュするための処理もあります。
画像の色を白にする関数ですか?
例でいえば、画像の輝度を設定するSetDrawBright()のような・・・

何もわからずすみません。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: マスクについて

#4

投稿記事 by softya(ソフト屋) » 13年前

パラダイス さんが書きました:あーなるほど、そうだったのですか・・・

>>DXライブラリではマスク処理は内部でやってくれます。
というのはつまり・・・マスク用の画像を用意せずともマスク処理は可能ってことですか?
アルファチャンネルだけでなく、bmpだと(0,0,0)を透明として扱えますよね?
SetTransColor()で変更できますが。
あれも一種のマスク処理です(内部では透明色で実現しているはず)。
パラダイス さんが書きました: >>あと白くフラッシュするための処理もあります。
画像の色を白にする関数ですか?
例でいえば、画像の輝度を設定するSetDrawBright()のような・・・
何もわからずすみません。
SetDrawBright()で大抵事は足りるはずですが、SetDrawBlendMode()でカラー演算するという手もあります(反転+加算)。
【補足】GraphFilter()でシェーダー処理という手もあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

パラダイス

Re: マスクについて

#5

投稿記事 by パラダイス » 13年前

>>アルファチャンネルだけでなく、bmpだと(0,0,0)を透明として扱えますよね?
前に黒で書いた絵をbmpで保存してテスト表示させてみたところ、所々線が切れてたことがあります。
DXライブラリの仕様で透過されてただけだったんですね。てっきりプログラムや環境、それか絵自体が悪かったのかと思ってました。

>>SetDrawBlendMode()でカラー演算するという手もあります(反転+加算)。
そんなことできたんですね、考えてもみませんでした・・・
でも下の効果で画像を表示してみたところ、ちょっと明るくなるだけで真っ白になるということはありませんでした。

コード:

SetDrawBlendMode( DX_BLENDMODE_INVSRC + DX_BLENDMODE_ADD, 255 );
DrawGraph( 0, 0, "Test.png", TRUE );
完全な白になるまでフラッシュをさせるにはカラー演算するよりもSetDrawBright()、またはGraphFilter()を使うべきですかね?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: マスクについて

#6

投稿記事 by softya(ソフト屋) » 13年前

パラダイス さんが書きました:>>アルファチャンネルだけでなく、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 );
これでどうしょうか?
まぁ描画コストがかかるのであんまりよろしくないとは思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

パラダイス

Re: マスクについて

#7

投稿記事 by パラダイス » 13年前

白くなりました、演算って普通に足しあう訳じゃなかったんですねorz
とりあえずマスクについての疑問は解けましたんで解決にします、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る