トップページ > 記事閲覧
SetUseZBufferFlag使用時に2D関連の描画順が
名前:PATOLE 日時: 2014/10/21 22:37

お世話になっております。 いつもDXライブラリを使用させていただいております。 現在、大量の3Dモデルを高速に描画するために DrawPolygonIndexed3D_UseVertexBuffer関数を用いてモデルを描画しております。 その際に、SetUseZBufferFlag関数を使用しているのですが SetUseZBufferFlag(TRUE);を入れた後に描画される 2D関連(DrawBoxやDrawGraphなど)の描画順がおかしくなりましたのでご報告させていただきます。 3Dの描画を行う前に、2D関連の描画処理を呼び出していますが 最終的な描画結果は、2D関連が最も手前にきてしまいます。 再現プログラムを書いてみましたのでご覧いただければ幸いです。 一部プログラムに ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=3007 のプログラムを利用しています。 DXライブラリバージョン:Ver3.13 コンパイラ:Visual Studio Express 2013 #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { VERTEX3D Vertex[4]; WORD Index[6]; int VertexBufHandle; int IndexBufHandle; ChangeWindowMode(TRUE);//ウィンドウモード // DXライブラリの初期化 ChangeWindowMode(TRUE); if (DxLib_Init() < 0) { // エラーが発生したら直ちに終了 return -1; } // Zバッファを使用する SetUseZBufferFlag(TRUE); // Zバッファへの書き込みを行う SetWriteZBufferFlag(TRUE); // 4頂点分の頂点バッファを作成 VertexBufHandle = CreateVertexBuffer(4, DX_VERTEX_TYPE_NORMAL_3D); // 6個分のインデックスバッファを作成 IndexBufHandle = CreateIndexBuffer(6, DX_INDEX_TYPE_16BIT); // 4頂点分のデータをセット Vertex[0].pos = VGet(100.0f, 100.0f, 0.0f); Vertex[0].norm = VGet(0.0f, 0.0f, -1.0f); Vertex[0].dif = GetColorU8(255, 255, 255, 255); Vertex[0].spc = GetColorU8(0, 0, 0, 0); Vertex[0].u = 0.0f; Vertex[0].v = 0.0f; Vertex[0].su = 0.0f; Vertex[0].sv = 0.0f; Vertex[1].pos = VGet(250.0f, 100.0f, 0.0f); Vertex[1].norm = VGet(0.0f, 0.0f, -1.0f); Vertex[1].dif = GetColorU8(255, 0, 255, 255); Vertex[1].spc = GetColorU8(0, 0, 0, 0); Vertex[1].u = 0.0f; Vertex[1].v = 0.0f; Vertex[1].su = 0.0f; Vertex[1].sv = 0.0f; Vertex[2].pos = VGet(100.0f, 300.0f, 0.0f); Vertex[2].norm = VGet(0.0f, 0.0f, -1.0f); Vertex[2].dif = GetColorU8(0, 255, 255, 255); Vertex[2].spc = GetColorU8(0, 0, 0, 0); Vertex[2].u = 0.0f; Vertex[2].v = 0.0f; Vertex[2].su = 0.0f; Vertex[2].sv = 0.0f; Vertex[3].pos = VGet(400.0f, 200.0f, 0.0f); Vertex[3].norm = VGet(0.0f, 0.0f, -1.0f); Vertex[3].dif = GetColorU8(0, 255, 255, 255); Vertex[3].spc = GetColorU8(0, 0, 0, 0); Vertex[3].u = 0.0f; Vertex[3].v = 0.0f; Vertex[3].su = 0.0f; Vertex[3].sv = 0.0f; // 2ポリゴン分のインデックスデータをセット Index[0] = 0; Index[1] = 1; Index[2] = 2; Index[3] = 3; Index[4] = 2; Index[5] = 1; // 頂点データを頂点バッファに転送 SetVertexBufferData(0, Vertex, 4, VertexBufHandle); // インデックスデータをインデックスバッファに転送 SetIndexBufferData(0, Index, 6, IndexBufHandle); while (CheckHitKey(KEY_INPUT_ESCAPE)==0){ if (ProcessMessage() != 0) return -1; if (ClearDrawScreen() != 0) return -1; DrawBox(0, 200, 640, 280, 0xFFFFFF, TRUE); // 頂点バッファとインデックスバッファを使用した2ポリゴンの描画 DrawPolygonIndexed3D_UseVertexBuffer(VertexBufHandle, IndexBufHandle, DX_NONE_GRAPH, FALSE); // カプセルを描画する DrawCapsule3D(VGet(320.0f, 100.0f, 0.0f), VGet(320.0f, 300.0f, 0.0f), 40.0f, 8, GetColor(0, 255, 0), GetColor(255, 255, 255), TRUE); ScreenFlip(); } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } 以上、ご報告とさせていただきます。 解決策などありましたら教示いただけると幸いです。
メンテ

Page: 1 |

Re: SetUseZBufferFlag使用時に2D関連の描画順が ( No.1 )
名前:管理人 日時:2014/10/21 23:59

SetUseZBufferFlag や SetWriteZBufferFlag は2Dの描画にも影響を与えるので正常な動作となります 3Dの描画にのみZバッファを使用したい場合は、代わりに SetUseZBuffer3D と SetWriteZBuffer3D をお使いください
メンテ
Re: SetUseZBufferFlag使用時に2D関連の描画順が ( No.2 )
名前:PATOLE(解決) 日時:2014/10/22 19:43

ご返答ありがとうございます。 SetUseZBufferではなく、SetUseZBuffer3Dだったのですね! これは大変失礼いたしました。 SetUseZBuffer3Dを使用しましたところ、意図した描画となりました。 ありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存