ページ 1 / 1
円形の描画領域を作るには
Posted: 2013年1月08日(火) 13:07
by コレジャナイ
あけましておめでとう御座います。
タイトル通り、円形の描画領域を作成するにはどのようにすれば宜しいのでしょうか?
色々調べては見たのですが、
SetUseZBufferFlag( TRUE );
DrawCircleToZBuffer( x, y, RADIUS, TRUE, DX_ZWRITE_MASK );
この二つの関数を用いる事により、特定の円形範囲内を描画させないようにする事は出来ました。
これにより
円の中に描画したい画像を画像A
背景を画像B
とした時、画像Aを先に描画してから上記のマスクを作成し、画像Bを描画する事で円の中に描画する事は出来ます。
ただ理想としては、背景の画像Bの上に画像Aを透過して描画したいため困っております。
画像Bを描画
透過設定した後画像Aを描画
マスクを作成
画像Bを描画
これで理想通りに出来るんじゃないかという気もするのですが、スマートじゃないというか二度手間感が凄いです。
(処理も遅くなりそうな気がします)
もし他にもっとシンプルな方法がありましたら、教えて下さると助かりますm(_ _)m
Re: 円形の描画領域を作るには
Posted: 2013年1月08日(火) 13:17
by コレジャナイ
【追記】
上記の方法で一応理想通りには表示されている事を確認しました。
Re: 円形の描画領域を作るには
Posted: 2013年1月08日(火) 14:12
by みけCAT
あなたがなさっていることの逆をすればよいのではないでしょうか?
コード:
SetUseZBufferFlag( TRUE );
DrawBoxToZBuffer(0,0,640,480,TRUE,DX_ZWRITE_MASK); // 画面全体を描画しないようにする
DrawCircleToZBuffer( x, y, RADIUS, TRUE, DX_ZWRITE_CLEAR ); // 円形の部分を描画するようにする
未確認です。
Re: 円形の描画領域を作るには
Posted: 2013年1月08日(火) 18:01
by コレジャナイ
無事出来ました。すみません、有難う御座います。
Re: 円形の描画領域を作るには
Posted: 2013年1月09日(水) 15:58
by コレジャナイ
解決を押してしまいましたが、同じトピックのためこちらで失礼させて頂きます。
Zバッファを使用した方法で理想通り表示出来ましたが、処理落ちが発生してしまいますorz
解決策や他に円形の描画領域を作る方法を探っていたのですが、どうにも発見出来ませんでした・・・。
何か別に処理の軽い方法はありますでしょうか?
Re: 円形の描画領域を作るには
Posted: 2013年1月09日(水) 23:23
by へにっくす
処理落ちするソースを貼らないで、何で別の処理を聞いてるのでしょうか?
そこが不思議です。
Re: 円形の描画領域を作るには
Posted: 2013年1月10日(木) 07:51
by コレジャナイ
ソースコード自体は長くなってしまうので割愛させて頂いておりました。
該当部分(原因)はみけCAT様が貼って下さった処理を1フレーム内で4回呼び出しております。
この部分をコメントアウトした所正常に動いておりましたので、確実に4回呼び出しが原因です。
何故4回も呼び出しているのかというと同時に別座標の4つの円を画面上に表示させるためです。
擬似コードですと
コード:
int i;
// Zバッファを使用する
SetUseZBufferFlag( TRUE );
//半透明処理
SetDrawBlendMode( DX_BLENDMODE_ALPHA, 105 );
for( i = 0; i < 4; i++){
DrawBoxToZBuffer(0,0,640,480,TRUE,DX_ZWRITE_MASK); // 画面全体を描画しないようにする
DrawCircleToZBuffer( x*i, y*i, RADIUS, TRUE, DX_ZWRITE_CLEAR ); // 円形の部分を描画するようにする
}
//マスクの解除
DrawBoxToZBuffer(0,0,640,480,TRUE,DX_ZWRITE_CLEAR);
//描画モードを元に戻す
SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 120);
このような形となります。
すみません、擬似コードくらい貼るべきなのにすっかり失念しておりました。
※座標に関しては擬似コードでは適当ですが、現実では別の数値を代入しております。
Re: 円形の描画領域を作るには
Posted: 2013年1月10日(木) 08:17
by コレジャナイ
「追記」
DrawCircleToZBufferの下にDrawGraphが入ります。
書き忘れておりました。
Re: 円形の描画領域を作るには
Posted: 2013年1月10日(木) 11:22
by softya(ソフト屋)
えーと、4回DrawBoxToZBufferで塗りつぶす意味がわかりません。そんな重い処理は1回で良いのでは?
Re: 円形の描画領域を作るには
Posted: 2013年1月10日(木) 13:30
by コレジャナイ
すみません書き間違いです。
DrawBoxToZBuffer(0,0,640,480,TRUE,DX_ZWRITE_MASK); // 画面全体を描画しないようにする
は半透明処理の下にあるものとしてお考え下さい。
Re: 円形の描画領域を作るには
Posted: 2013年1月10日(木) 13:36
by コレジャナイ
ノートPCでのみ処理落ちが発生する程度なので無視も可能ですし、自分で解決策を考えてみます。
ご返答下さって有難う御座いましたm(_ _)m