トップページ > 記事閲覧
Zバッファを用いた半透明な画像の描画
名前:SAI 日時: 2014/04/10 01:52

いつもDXライブラリには大変お世話になっております。 DXライブラリには、描画順に関わらず、前後の位置関係に応じて描画を調整してくれるSetUseZBuffer3D関数がありますが、この関数を用いて半透明な画像を描画したところ、半透明部分の描画がおかしくなるという現象が起きました。 サンプルコードをこちらに載せます。 このコードでは、最初に手前に白い三角形を半透明に描画した後、奥に赤い三角形を描画しています。 白い三角形が不透明なら問題ないのですが、半透明の場合は白い三角形の後ろに赤い三角形が描画されておらず、背景の黒が映っています。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // Zバッファを有効にする SetUseZBuffer3D( TRUE ) ; // Zバッファへの書き込みを有効にする SetWriteZBuffer3D( TRUE ) ; SetDrawBlendMode(DX_BLENDMODE_ALPHA,100); DrawTriangle3D( VGet(100.0f,100.0f, 0.0f), VGet(500.0f,400.0f, 0.0f), VGet(600.0f,100.0f, 0.0f), GetColor( 255,255,255 ), TRUE ) ; SetDrawBlendMode(DX_BLENDMODE_NOBLEND,0); DrawTriangle3D( VGet(300.0f,200.0f,100.0f), VGet(100.0f,500.0f,100.0f), VGet(800.0f,100.0f,100.0f), GetColor( 255,0,0 ), TRUE ) ; // キー入力待ちをする WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } 関数の仕様を見れば、後ろにあるものは描画されないとのことなのでこの結果は当然なのですが、これでは半透明な画像の描画がうまくできません。 Zソートして遠くのものから描画したり、2回に分けて描画するなどの方法で解決できるのですが、DXライブラリにこれを解決する機能があるのでしたら教えていただけないでしょうか。 どうかよろしくお願いします。
メンテ

Page: 1 |

Re: Zバッファを用いた半透明な画像の描画 ( No.1 )
名前:ろぜ 日時:2014/04/10 13:32

透明やZソートでログの検索をすると似たようなものがあるかもしれませんが・・・ 透明要素を持たないモデルやフレームをまずZバッファで描画をしてしまい、最後に透明要素をもつものはZソートをしながら、カメラより奥のものから描画するしかないと思います。 またこの際、透明要素をもつモデル、フレーム同士が複雑に交差していたり、ソートがおおざっぱ(透明要素が複数あるのにモデル単位でソートしてる)だとやはり正確な結果は得られないと思います。
メンテ
Re: Zバッファを用いた半透明な画像の描画 ( No.2 )
名前:SAI 日時:2014/04/10 18:35

ろぜさん、回答ありがとうございます。 万能な手段はないようですので、半透明なものを描画する際はケースバイケースで対策を考えてみることにします。 どうもお手数をおかけしました。
メンテ

Page: 1 |

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

   クッキー保存