>>管理人さん
ご対応ありがとうございます。
使用してみたところ、「DrawPolygon32bitIndexed3D」では「DrawPolygonIndexed3D」と同じように描画されない不具合があると思われます。
こちらがテストコードになります。
奥に青のポリゴン2枚・手前に緑のポリゴン2枚が描画されることを想定した描画ですが、「DrawPolygon32bitIndexed3D」を使っている緑のポリゴンが正常に描画されません。
両方「DrawPolygonIndexed3D」で描画した場合は青と緑のポリゴンが正常に描画されました。
---
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// ウインドウモードで起動
ChangeWindowMode(TRUE) ;
// DXライブラリの初期化
if(DxLib_Init() < 0) return -1 ;
// 描画先を裏画面にする
SetDrawScreen(DX_SCREEN_BACK) ;
//カメラ設定
SetCameraDotAspect(640.0f / 480.0f)
SetupCamera_Perspective(1.047f);
SetCameraPositionAndTarget_UpVecY(VGet(0.0f, 200.0f, -100.0f), VGet(0.0f, 0.0f, 136.0f))
SetCameraNearFar(182.5f, 1000.0f)
//頂点データ
std::vector<VERTEX3D> vert16;
std::vector<VERTEX3D> vert32;
//頂点インデックスデータ
std::vector<uint16_t> index16;
std::vector<uint32_t> index32;
//16ビット版の頂点生成
vert16.resize(8);
vert16[0].pos = VGet(-50.0f, 0.0f, 200.0f);
vert16[0].norm = VGet(0.0f, 1.0f, 0.0f);
vert16[0].dif = GetColorU8(0, 0, 255, 255);
vert16[0].spc = GetColorU8(0, 0, 0, 255);
vert16[0].u = 0.0f;
vert16[0].v = 0.0f;
vert16[0].su = 0.0f;
vert16[0].sv = 0.0f;
vert16[1].pos = VGet(-50.0f, 0.0f, 200.0f);
vert16[1].norm = VGet(0.0f, 1.0f, 0.0f);
vert16[1].dif = GetColorU8(0, 0, 255, 255);
vert16[1].spc = GetColorU8(0, 0, 0, 255);
vert16[1].u = 0.0f;
vert16[1].v = 0.0f;
vert16[1].su = 0.0f;
vert16[1].sv = 0.0f;
vert16[2].pos = VGet(-30.0f, 0.0f, 200.0f);
vert16[2].norm = VGet(0.0f, 1.0f, 0.0f);
vert16[2].dif = GetColorU8(0, 0, 255, 255);
vert16[2].spc = GetColorU8(0, 0, 0, 255);
vert16[2].u = 0.0f;
vert16[2].v = 0.0f;
vert16[2].su = 0.0f;
vert16[2].sv = 0.0f;
vert16[3].pos = VGet(-50.0f, 0.0f, 100.0f);
vert16[3].norm = VGet(0.0f, 1.0f, 0.0f);
vert16[3].dif = GetColorU8(0, 0, 255, 255);
vert16[3].spc = GetColorU8(0, 0, 0, 255);
vert16[3].u = 0.0f;
vert16[3].v = 0.0f;
vert16[3].su = 0.0f;
vert16[3].sv = 0.0f;
vert16[4].pos = VGet(50.0f, 0.0f, 200.0f);
vert16[4].norm = VGet(0.0f, 1.0f, 0.0f);
vert16[4].dif = GetColorU8(0, 0, 255, 255);
vert16[4].spc = GetColorU8(0, 0, 0, 255);
vert16[4].u = 0.0f;
vert16[4].v = 0.0f;
vert16[4].su = 0.0f;
vert16[4].sv = 0.0f;
vert16[5].pos = VGet(-50.0f, 0.0f, 100.0f);
vert16[5].norm = VGet(0.0f, 1.0f, 0.0f);
vert16[5].dif = GetColorU8(0, 0, 255, 255);
vert16[5].spc = GetColorU8(0, 0, 0, 255);
vert16[5].u = 0.0f;
vert16[5].v = 0.0f;
vert16[5].su = 0.0f;
vert16[5].sv = 0.0f;
vert16[6].pos = VGet(30.0f, 0.0f, 100.0f);
vert16[6].norm = VGet(0.0f, 1.0f, 0.0f);
vert16[6].dif = GetColorU8(0, 0, 255, 255);
vert16[6].spc = GetColorU8(0, 0, 0, 255);
vert16[6].u = 0.0f;
vert16[6].v = 0.0f;
vert16[6].su = 0.0f;
vert16[6].sv = 0.0f;
vert16[7].pos = VGet(50.0f, 0.0f, 100.0f);
vert16[7].norm = VGet(0.0f, 1.0f, 0.0f);
vert16[7].dif = GetColorU8(0, 0, 255, 255);
vert16[7].spc = GetColorU8(0, 0, 0, 255);
vert16[7].u = 0.0f;
vert16[7].v = 0.0f;
vert16[7].su = 0.0f;
vert16[7].sv = 0.0f;
//32ビット版の頂点生成(z方向手前に100ずらし、色を緑に変更)
vert32 = vert16;
for (auto& a : vert32)
{
a.pos.z -= 100.0f;
a.dif.g = 255;
a.dif.b = 0;
}
//頂点インデックスの設定
index16 = { 0,1,2,0,2,3,4,5,6,4,6,7 };
index32 = { 0,1,2,0,2,3,4,5,6,4,6,7 };
// メインループ
while( ProcessMessage() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
//ポリゴンの描画
DrawPolygonIndexed3D(vert16.data(), vert16.size(), index16.data(), index16.size() / 3, DX_NONE_GRAPH, FALSE);
DrawPolygon32bitIndexed3D(vert32.data(), vert32.size(), index32.data(), index32.size() / 3, DX_NONE_GRAPH, FALSE);
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}