あけましておめでとう御座います。
タイトル通り、円形の描画領域を作成するにはどのようにすれば宜しいのでしょうか?
色々調べては見たのですが、
SetUseZBufferFlag( TRUE );
DrawCircleToZBuffer( x, y, RADIUS, TRUE, DX_ZWRITE_MASK );
この二つの関数を用いる事により、特定の円形範囲内を描画させないようにする事は出来ました。
これにより
円の中に描画したい画像を画像A
背景を画像B
とした時、画像Aを先に描画してから上記のマスクを作成し、画像Bを描画する事で円の中に描画する事は出来ます。
ただ理想としては、背景の画像Bの上に画像Aを透過して描画したいため困っております。
画像Bを描画
透過設定した後画像Aを描画
マスクを作成
画像Bを描画
これで理想通りに出来るんじゃないかという気もするのですが、スマートじゃないというか二度手間感が凄いです。
(処理も遅くなりそうな気がします)
もし他にもっとシンプルな方法がありましたら、教えて下さると助かりますm(_ _)m
円形の描画領域を作るには
-
コレジャナイ
Re: 円形の描画領域を作るには
解決を押してしまいましたが、同じトピックのためこちらで失礼させて頂きます。
Zバッファを使用した方法で理想通り表示出来ましたが、処理落ちが発生してしまいますorz
解決策や他に円形の描画領域を作る方法を探っていたのですが、どうにも発見出来ませんでした・・・。
何か別に処理の軽い方法はありますでしょうか?
Zバッファを使用した方法で理想通り表示出来ましたが、処理落ちが発生してしまいますorz
解決策や他に円形の描画領域を作る方法を探っていたのですが、どうにも発見出来ませんでした・・・。
何か別に処理の軽い方法はありますでしょうか?
-
コレジャナイ
Re: 円形の描画領域を作るには
ソースコード自体は長くなってしまうので割愛させて頂いておりました。
該当部分(原因)はみけCAT様が貼って下さった処理を1フレーム内で4回呼び出しております。
この部分をコメントアウトした所正常に動いておりましたので、確実に4回呼び出しが原因です。
何故4回も呼び出しているのかというと同時に別座標の4つの円を画面上に表示させるためです。
擬似コードですと
このような形となります。
すみません、擬似コードくらい貼るべきなのにすっかり失念しておりました。
※座標に関しては擬似コードでは適当ですが、現実では別の数値を代入しております。
該当部分(原因)はみけ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);
すみません、擬似コードくらい貼るべきなのにすっかり失念しておりました。
※座標に関しては擬似コードでは適当ですが、現実では別の数値を代入しております。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 円形の描画領域を作るには
えーと、4回DrawBoxToZBufferで塗りつぶす意味がわかりません。そんな重い処理は1回で良いのでは?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
コレジャナイ
Re: 円形の描画領域を作るには
すみません書き間違いです。
DrawBoxToZBuffer(0,0,640,480,TRUE,DX_ZWRITE_MASK); // 画面全体を描画しないようにする
は半透明処理の下にあるものとしてお考え下さい。
DrawBoxToZBuffer(0,0,640,480,TRUE,DX_ZWRITE_MASK); // 画面全体を描画しないようにする
は半透明処理の下にあるものとしてお考え下さい。
-
コレジャナイ
Re: 円形の描画領域を作るには
ノートPCでのみ処理落ちが発生する程度なので無視も可能ですし、自分で解決策を考えてみます。
ご返答下さって有難う御座いましたm(_ _)m
ご返答下さって有難う御座いましたm(_ _)m