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


◇DirectX11プログラミング -インデックスデータを扱う-

調査の過程で発見した。インデックスバッファーなるものがあった

どういうものかと言うと,
	Vertex3D hVectorData[TYOUTEN] = {
{頂点データA},
{頂点データB},
{頂点データC},
}
と言うデータがあったとする
これを
	unsigned short hIndexData[3] = {
0,1,2
}
と,頂点データの順番で表すことができる

これを,コンテキストに設定する
	//インデックスバッファ作成
// D3D11_BUFFER_DESC hBufferDesc;
hBufferDesc.ByteWidth = sizeof(hIndexData);
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);
コメントアウトしている定義は,既に生成しているものを使いまわしている為です
それが気に入らない人は,コメントを外して別名にすれば良いです


注意すべき点として,描画命令が異なります
		hpDeviceContext->Draw(3, 0);

		hpDeviceContext->DrawIndexed(3, 0, 0);
大抵の頂点データには重複するポイントが複数ある為,データ量を減らすことができます
今後こういうフォーマットのデータも出てくるので,使えるようにしておきましょう


TOPプログラマ専用DirectX11開発