トップページ > 記事閲覧
DrawPolygon2DToShader の描画順について
名前:ゆうたおる 日時: 2020/10/27 18:56

こんにちは。少し気になったので質問させていただきます。 DrawPolygon2DToShaderの呼び出し後にDrawGraphといった描画関数を呼んだ際、本来ならDrawGraphで描画した画像が一番上に来ると思っていたのですが DrawPolygon2DToShaderの画像が一番上に描画されてしまいます。 一度リファレンス等を拝見しましたが、特にそのような仕様が描かれてなかったので気になった次第です。 もし私の使用方法が間違っていればご指摘願いたいです。
メンテ

Page: 1 |

Re: DrawPolygon2DToShader の描画順について ( No.1 )
名前:管理人 日時:2020/10/28 21:42

手元で以下のような DrawPolygon2DToShader の呼び出し後に DrawGraph を実行するプログラムを組み 試してみましたが、問題無く DrawGraph で描画したものが DrawPolygon2DToShader で描画したものより上に表示されました #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int texhandle, pshandle ; VERTEX2DSHADER Vert[ 6 ] ; ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // テクスチャを読み込む texhandle = LoadGraph( "Tex1.bmp" ) ; // ピクセルシェーダーを読み込む pshandle = LoadPixelShader( "PixelShaderTestPS_DX11.pso" ) ; // 2ポリゴン分の頂点のデータをセットアップ Vert[ 0 ].pos = VGet( 0.0f, 0.0f, 0.0f ) ; Vert[ 0 ].rhw = 1.0f ; Vert[ 0 ].dif = GetColorU8( 255,255,255,255 ) ; Vert[ 0 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vert[ 0 ].u = 0.0f ; Vert[ 0 ].v = 0.0f ; Vert[ 0 ].su = 0.0f ; Vert[ 0 ].sv = 0.0f ; Vert[ 1 ].pos = VGet( 256.0f, 0.0f, 0.0f ) ; Vert[ 1 ].rhw = 1.0f ; Vert[ 1 ].dif = GetColorU8( 255,255,255,255 ) ; Vert[ 1 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vert[ 1 ].u = 1.0f ; Vert[ 1 ].v = 0.0f ; Vert[ 1 ].su = 1.0f ; Vert[ 1 ].sv = 0.0f ; Vert[ 2 ].pos = VGet( 0.0f, 256.0f, 0.0f ) ; Vert[ 2 ].rhw = 1.0f ; Vert[ 2 ].dif = GetColorU8( 255,255,255,255 ) ; Vert[ 2 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vert[ 2 ].u = 0.0f ; Vert[ 2 ].v = 1.0f ; Vert[ 2 ].su = 0.0f ; Vert[ 2 ].sv = 1.0f ; Vert[ 3 ].pos = VGet( 256.0f, 256.0f, 0.0f ) ; Vert[ 3 ].rhw = 1.0f ; Vert[ 3 ].dif = GetColorU8( 255,255,255,255 ) ; Vert[ 3 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vert[ 3 ].u = 1.0f ; Vert[ 3 ].v = 1.0f ; Vert[ 3 ].su = 1.0f ; Vert[ 3 ].sv = 1.0f ; Vert[ 4 ].pos = VGet( 0.0f, 256.0f, 0.0f ) ; Vert[ 4 ].rhw = 1.0f ; Vert[ 4 ].dif = GetColorU8( 255,255,255,255 ) ; Vert[ 4 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vert[ 4 ].u = 0.0f ; Vert[ 4 ].v = 1.0f ; Vert[ 4 ].su = 0.0f ; Vert[ 4 ].sv = 1.0f ; Vert[ 5 ].pos = VGet( 256.0f, 0.0f, 0.0f ) ; Vert[ 5 ].rhw = 1.0f ; Vert[ 5 ].dif = GetColorU8( 255,255,255,255 ) ; Vert[ 5 ].spc = GetColorU8( 0, 0, 0, 0 ) ; Vert[ 5 ].u = 1.0f ; Vert[ 5 ].v = 0.0f ; Vert[ 5 ].su = 1.0f ; Vert[ 5 ].sv = 0.0f ; // 使用するテクスチャを0番にセット SetUseTextureToShader( 0, texhandle ) ; // 使用するピクセルシェーダーをセット SetUsePixelShader( pshandle ) ; // シェーダーを使用した2Dの2ポリゴンの描画 DrawPolygon2DToShader( Vert, 2 ) ; // 後から上にテクスチャを描画 DrawGraph( 10, 10, texhandle, FALSE ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } お使いのDXライブラリのバージョンは幾つでしょうか? DrawPolygon2DToShader とは別件だったと思いますが、ご報告いただいたバグに関連する 処理を最近変更したような記憶がありますので、もしかしたら最新のバージョンでは 修正されているかもしれません なので、よろしければダウンロードページにある正式公開の最新バージョンか、 こちらの暫定最新バージョンでも同様の描画結果になってしまうかお試しになってみてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: DrawPolygon2DToShader の描画順について ( No.2 )
名前:ゆうたおる 日時:2020/10/29 10:50

ご返信ありがとうございます。 テストしてみようと思いましたが、PixelShaderTestPS_DX11.psoを所持していない為、確認することができませんでした。 一応、元々あったPixelShaderTestPS.psoでテストしましたが、真っ白のテクスチャが見えただけでした。 恐らくこちらのソースの記述が誤ってる可能性が高いので、こちらのソースをアップロードしましたので、確認していただけるでしょうか?(お時間頂いて申し訳ございません。。) (この後にhttpsを連結)://drive.google.com/file/d/164olp9ogJvirtF7FVc43BVy1fLNoqAh0/view?usp=sharing
メンテ
Re: DrawPolygon2DToShader の描画順について ( No.3 )
名前:管理人 日時:2020/10/29 22:58

> テストしてみようと思いましたが、PixelShaderTestPS_DX11.psoを所持していない為、確認することができませんでした。 すみません、「私もこのように DrawPolygon2DToShader の後に DrawGraph を実行してみました」 という意味だけのコードで、ゆうたおるさんに実行していただくことは想定していませんでした m(_ _;m > 恐らくこちらのソースの記述が誤ってる可能性が高いので、こちらのソースをアップロードしましたので、確認していただけるでしょうか?(お時間頂いて申し訳ございません。。) ソースを拝見したところ、Zバッファが SetUseZBufferFlag(TRUE); SetWriteZBufferFlag(TRUE); ↑こちらで有効になっているのが原因でした Zバッファは2Dの描画でも有効ですので、先に DrawPolygon2DToShader によるポリゴンが 描画されてしまったため、後から同じZ座標に DrawGraph で描画しようとしてもZバッファの効果に よって描画されない、という状態になっています Zバッファを必要とする3D描画の前でのみ SetUseZBufferFlag(TRUE); SetWriteZBufferFlag(TRUE); を実行して、3D描画が終わったら SetUseZBufferFlag(FALSE); SetWriteZBufferFlag(FALSE); を実行するようにしていただくか、SetUseZBufferFlag と SetWriteZBufferFlag の代わりに 非公開関数の、3D描画の場合にのみ効果がある SetUseZBuffer3D と SetWriteZBuffer3D を 使用するようにしてみてください m(_ _)m // Zバッファを使用するかどうかを設定する( 3D描画のみに影響 ) // Flag TRUE:Zバッファを使用する FALSE:Zバッファを使用しない( デフォルト ) int SetUseZBuffer3D( int Flag ) ; // Zバッファに書き込みを行うかどうかを設定する( 3D描画のみに影響 ) // Flag TRUE:書き込みを行う FALSE:書き込みを行わない( デフォルト ) int SetWriteZBuffer3D( int Flag ) ;
メンテ
Re: DrawPolygon2DToShader の描画順について ( No.4 )
名前:ゆうたおる(解決) 日時:2020/10/30 10:00

なるほど、Zバッファフラグが有効なりっぱなしが原因だったのですね。。 ありがとうございます。無事解決いたしました。 お手数おかけしました m(_ _ )m
メンテ

Page: 1 |

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

   クッキー保存