Nanashi-softプログラマ専用DirectX11開発


◇DirectX11プログラミング -インデックスデータを複数持つには?-

次にインデックスデータを2つ持つ方法を考えます

インデックスデータは,このようなプログラムになっています
	//インデックスバッファ作成
// D3D11_BUFFER_DESC hBufferDesc;
hBufferDesc.ByteWidth = sizeof(unsigned short) * INDEXSU;
hBufferDesc.Usage = D3D11_USAGE_DEFAULT;
hBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
hBufferDesc.CPUAccessFlags = 0;
hBufferDesc.MiscFlags = 0;
hBufferDesc.StructureByteStride = sizeof(unsigned short);

// D3D11_SUBRESOURCE_DATA hSubResourceData;
hSubResourceData.pSysMem = hIndexData;
hSubResourceData.SysMemPitch = 0;
hSubResourceData.SysMemSlicePitch = 0;

ID3D11Buffer* hpIndexBuffer;
if(FAILED(hpDevice->CreateBuffer(&hBufferDesc, &hSubResourceData, &hpIndexBuffer))){
MessageBoxW(hWnd, L"CreateBuffer Index", L"Err", MB_ICONSTOP);
goto End;
}

//そのインデックスバッファをコンテキストに設定
hpDeviceContext->IASetIndexBuffer(hpIndexBuffer, DXGI_FORMAT_R16_UINT, 0);
同じCreateBufferを使用するところといい,頂点バッファーと同じ発想で多重化できる事が容易に想像できます


○処理の流れ
mainクラス

pmdクラスでモデルデータロード

CreateBufferで頂点データを生成

modeldataクラスにID3D11Bufferポインターをセット

描画時にIASetIndexBufferで使用するインデックスデータをスイッチ


初期化で,インデックスバッファーを生成して,
	#define MODELDATA_MAX 2
int INDEXSU[2];
ID3D11Buffer *idxBuf[MODELDATA_MAX];
~略~
for(int mdcnt=0; mdcnt < MODELDATA_MAX; mdcnt++){
~略~
//インデックスバッファ作成
hBufferDesc.ByteWidth = sizeof(unsigned short) * INDEXSU[mdcnt];
hBufferDesc.Usage = D3D11_USAGE_DEFAULT;
hBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
hBufferDesc.CPUAccessFlags = 0;
hBufferDesc.MiscFlags = 0;
hBufferDesc.StructureByteStride = sizeof(unsigned short);

hSubResourceData.pSysMem = hIndexData;
hSubResourceData.SysMemPitch = 0;
hSubResourceData.SysMemSlicePitch = 0;

if(FAILED(hpDevice->CreateBuffer(&hBufferDesc, &hSubResourceData, &idxBuf[mdcnt]))){
MessageBoxW(hWnd, L"CreateBuffer Index", L"Err", MB_ICONSTOP);
goto End;
}
~略~
}
メインループで,それをセットして描画する
	for(int mdcnt=0; mdcnt < MODELDATA_MAX; mdcnt++){
~略~
//インデックスバッファー切り替え
hpDeviceContext->IASetIndexBuffer(idxBuf[mdcnt], DXGI_FORMAT_R16_UINT, 0);
~略~
//インデックス描画
hpDeviceContext->DrawIndexed(INDEXSU[mdcnt], 0, 0);
}
インデックス数とインデックスバッファーのポインターを保管しておけば,描画可能です


TOPプログラマ専用DirectX11開発

パジャマ萌えっ娘☆優愛ネコミトリ 詰めピラミッド+メイナの実験場~小生意気な感じにしてみました~