ページ 11

画像部分を真っ白にする方法

Posted: 2010年7月19日(月) 01:28
by ぬるぽ
DXライブラリで、
画像部分を真っ黒にする方法は

SetDrawBright( 0 , 0 , 0 );
//画像を表示
SetDrawBright( 255 , 255 , 255 );

と、輝度を指定してあげれば出来るのですが、
画像部分を真っ白にする方法が分かりません。
そのようなこと可能なのでしょうか?
もし知っている方がいましたら教えてください。
よろしくお願いします。

Re:画像部分を真っ白にする方法

Posted: 2010年7月20日(火) 01:12
by ぬるぽ
不可能ということで解決にしたいと思います。

Re:画像部分を真っ白にする方法

Posted: 2010年7月20日(火) 01:23
by 白い時空
解決になってしまいましたが…

画面を真っ白にするなら
白をαブレンドで描画すればいいんじゃないですか?

DrawBox( 0, 0, 640, 480, GetColor(255,255,255) , TRUE);//画面全体を白で描画
SetDrawBlendMode( 0, DX_BLENDMODE_ALPHA );//αブレンドの値を設定
//画像を表示
SetDrawBlendMode( 255, DX_BLENDMODE_NOBLEND);//元に戻す

多分これでいいと思います。

Re:画像部分を真っ白にする方法

Posted: 2010年7月20日(火) 03:49
by ぬるぽ
ああ、すみません。強調すればよかったですね。
画面全体を真っ白にするのではなく、
画像自体をプログラムで真っ白に変えてみたいのです。

添付参照。

白く加工したものを表示する方法もありますが、
メモリが勿体ないので……

Re:画像部分を真っ白にする方法

Posted: 2010年7月20日(火) 08:04
by シエル
加算ブレンドしまくるとか

Re:画像部分を真っ白にする方法

Posted: 2010年7月20日(火) 11:05
by へろりくしょん
DXライブラリはさっぱり分かりませんが。

画像のビットブロックを直接いじるとかは出来ないのでしょうか。

もしくは、画像からマスクなりリージョンなりを作って塗りつぶすとか。


>白く加工したものを表示する方法もありますが、
>メモリが勿体ないので……
png画像で640x480のサイズでも300kb程度ですよ。
そんなにケチるほどのメモリ量では無いと思いますが。

Re:画像部分を真っ白にする方法

Posted: 2010年7月20日(火) 12:28
by 白い時空
加算ブレンドと反転描画を組み合わせたらできました。

その方法ですが、反転画像を描画し、その後元画像を加算ブレンドで描画します。
そのため、2回描画する必要があります。
SetDrawBlendMode( DX_BLENDMODE_INVSRC, 255);//画像を反転させて描画する
//画像を描画
SetDrawBlendMode( DX_BLENDMODE_ADD, 255);//画像を加算ブレンドで描画する
//画像を描画
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 255) ;//元に戻す
反転画像の色は(255-元画像)になるので、元画像と加算ブレンドすると、
元画像+(255-元画像)=255
となることを利用しました。 画像

Re:画像部分を真っ白にする方法

Posted: 2010年7月20日(火) 21:44
by ぬるぽ
>白い時空さん
おお、この発想はなかったです。
助かりました。ありがとうございました。

処理軽減

Posted: 2010年7月29日(木) 09:18
by yamataka
「画面上の全ての弾と自機が接触しているかを計算する」
のと
「弾のx座標が自機のx座標-判定範囲以上&自機のx座標+判定範囲以下であり、
弾のy座標が自機のy座標-判定範囲以上&自機のy座標+判定範囲以下なら、
その弾と自機が接触しているかを計算する](判定範囲=10)
では、どちらの方の処理が軽いですか?

Re:処理軽減

Posted: 2010年7月29日(木) 09:29
by バグ
>>「画面上の全ての弾と自機が接触しているかを計算する」
>>のと

この処理は結局…

>>「弾のx座標が自機のx座標-判定範囲以上&自機のx座標+判定範囲以下であり、
>>弾のy座標が自機のy座標-判定範囲以上&自機のy座標+判定範囲以下なら、
>>その弾と自機が接触しているかを計算する](判定範囲=10)
>>では、どちらの方の処理が軽いですか?

この処理と同意なのでは?
2段階に分ける意味が分からないのですが…?

Re:処理軽減

Posted: 2010年7月29日(木) 09:42
by yamataka
まさかの二つとも同じですか。

一つ目は、画面上の弾全てを計算。
二つ目は、自機の遠くにある弾は飾りということで計算しない。近くにあれば計算する。
ということだったのですが、
まさか同じだったとは思いませんでした。

ありがとうございました。 画像

Re:処理軽減

Posted: 2010年7月29日(木) 09:50
by バグ
自機と敵弾の距離が一定以下だったら被弾してるってことですよね?
ということは、結局全ての弾との距離を計算する訳だから、分けると二度手間なんじゃないかな…と思ったんです。

あぁ…でも、当たり判定の計算方法によってはそうとも言い切れないのかな?(^_^;)

Re:処理軽減

Posted: 2010年7月29日(木) 10:02
by シエル
>>二つ目は、自機の遠くにある弾は飾りということで計算しない。近くにあれば計算する。

まずこれを判定する時間が必要になるし、またあなたの当たり判定計算法がどうなのか
知らないので、何とも言えません。
実測が一番でしょう。

Re:処理軽減

Posted: 2010年7月29日(木) 10:06
by yamataka
> 自機と敵弾の距離が一定以下だったら被弾してるってことですよね?
いえ、自機と全ての敵弾の座標を大小関係(>,<)で判定して、(>,<は三平方の定理で距離を計算するより軽いと思ったので)
真だったら三平方の定理(だっけ?)で真だった敵弾との距離を計算して被弾しているか出します。 画像

Re:処理軽減

Posted: 2010年7月29日(木) 19:02
by ookami
どちらが速いかは処理系依存ですね。

> 判定範囲=10

くらいなら、
後者の前半部分、

「弾のx座標が自機のx座標-判定範囲以上&自機のx座標+判定範囲以下であり、
弾のy座標が自機のy座標-判定範囲以上&自機のy座標+判定範囲以下なら」

だけで判定するというのはいかがでしょう?

Re:処理軽減

Posted: 2010年7月29日(木) 20:25
by yamataka
そうですか、やめておいた方がいいんですね。

バグさん、シエルさん、ookamiさん有り難うございました。