トップページ > 記事閲覧
3Dの描画で合成モードを指定したい
名前:もんも 日時: 2018/03/02 18:47

本当に恐縮ではございますが、さらにもう一つ、質問させていただきます。 3Dの図形関数(DrawPolygon含め)に対して、合成モードを指定することはできますでしょうか? どうやら、2Dの合成モードとは系統が異なっていらっしゃるのか、SetDrawBlendMode関数を使っても指定することができませんでした。 MV1モデルについてはMV1SetMaterialDrawBlendModeで変更できることは承知しておるのですが、これも図形描画とは関係なさそうですよね。 回答よろしくお願いします。
メンテ

Page: 1 |

Re: 3Dの描画で合成モードを指定したい ( No.1 )
名前:もんも() 日時:2018/03/02 23:09

えっと、DX_BLENDMODE_SRCCOLORを使ってアルファを無効にしようと思っていたのですが、代わりに
メンテ
Re: 3Dの描画で合成モードを指定したい ( No.2 )
名前:もんも(解決?) 日時:2018/03/02 23:14

失礼しました、途中で送信してしまいました 当初、DX_BLENDMODE_SRCCOLORを使ってアルファを無効にしようと思っていたのですが、 代わりにSetDrawAlphaTestでDX_CMP_ALWAYSに指定することで、ひとまず目標の挙動を作ることはできました。 ただ、3D図形描画関数で加算合成などを使いたいときが来ないとも限らないので、 できればブレンドモードを設定する方法も伺っておきたいと存じます。 回答よろしくお願いします。
メンテ
Re: 3Dの描画で合成モードを指定したい ( No.3 )
名前:8127 日時:2018/03/03 02:25

SetDrawScreen( ) ;で適当なスクリーンに一旦描画してからブレンドモードを変えて再び描画すればできると思いますが・・・ スマートなやり方ではないですね・・・
メンテ
Re: 3Dの描画で合成モードを指定したい ( No.4 )
名前:管理人 日時:2018/03/03 23:33

3D図形描画関数でも2D図形描画関数と同じように SetDrawBlendMode関数を使用して合成モードを指定することができます 試しに手元で以下のような『2Dの緑色の四角形の上に3Dの箱を加算ブレンドで描画する』サンプルで確認してみましたが、 3Dの箱は正しく加算ブレンドで描画されました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ) ; SetGraphMode( 640, 480, 32 ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; SetDrawScreen( DX_SCREEN_BACK ) ; while( ProcessMessage() == 0 ) { ClearDrawScreen() ; // 先に画面左上に緑色の四角形を描画する SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 255 ) ; DrawBox( 0, 0, 320, 240, GetColor( 0,128,0 ), TRUE ) ; // その上に3Dの箱を加算ブレンドで描画する SetDrawBlendMode( DX_BLENDMODE_ADD, 255 ) ; DrawCube3D( VGet( 320.0f - 100.0f, 240.0f - 100.0f, 0.0f - 100.0f ), VGet( 320.0f + 100.0f, 240.0f + 100.0f, 0.0f + 100.0f ), GetColor( 128,128,128 ), GetColor( 0,0,0 ), TRUE ) ; ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } 3Dの透明要素のある物体を描画する場合、Zバッファの仕様の関係でカメラ( 視点 )から見て奥のものから 描画しないと正しい描画結果になりませんので、恐らく描画する順番の関係でもんもさんが意図された描画結果に ならなかったのではないかと思います
メンテ
Re: 3Dの描画で合成モードを指定したい ( No.5 )
名前:もんも(解決) 日時:2018/03/04 01:17

頂いたプログラムで検証したところ、確かに加算ブレンドになっておりました。 うーん、私の場合は不透明に描画したかったのがSRCCOLORが効かずに透明になってしまった (その際は、DrawPolygonIndexed3DToShader関数を使って描画し、アルファ値はシェーダーで出力しました)ので、 お言葉ですが、描画順の問題ではないと思います。 時間ができたらもうすこし検証して報告させていただこうと思います。 回答ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存