IndexBuffer는 여러 정점에 대한 인덱스를 저장하기 위해 사용하는 버퍼입니다.
IndexBuffer를 사용하여 정점 데이터를 효율적으로 관리 가능합니다.
VertexBuffer와 InputLayout과 동일하게 IA 단계에 연결하여 사용합니다.
// 사이즈 조정 (4각형 = 3각형 2개로 제작 가능)
_vertices.resize(6);
// 위치 정보와 색상 정보를 설정합니다.
_vertices[0].position = Vec3(-0.5f, -0.5f, 0.0f);
_vertices[0].color = Color(1.0f, 0.0f, 0.0f, 0.0f);
_vertices[1].position = Vec3(0.0f, 0.5f, 0.0f);
_vertices[1].color = Color(1.0f, 0.0f, 0.0f, 0.0f);
_vertices[2].position = Vec3(0.5f, -0.5f, 0.0f);
_vertices[2].color = Color(1.0f, 0.0f, 0.0f, 0.0f);
_vertices[3].position = Vec3(0.5f, -0.5f, 0.0f);
_vertices[3].color = Color(1.0f, 0.0f, 0.0f, 0.0f);
_vertices[4].position = Vec3(0.0f, 0.5f, 0.0f);
_vertices[4].color = Color(1.0f, 0.0f, 0.0f, 0.0f);
_vertices[5].position = Vec3(0.5f, 0.5f, 0.0f);
_vertices[5].color = Color(1.0f, 0.0f, 0.0f, 1.0f);
// 사이즈 조정
_vertices.resize(4);
// 위치 정보와 색상 정보를 설정합니다.
_vertices[0].position = Vec3(-0.5f, -0.5f, 0.0f);
_vertices[0].color = Color(1.0f, 0.0f, 0.0f, 1.0f);
_vertices[1].position = Vec3(-0.5f, 0.5f, 0.0f);
_vertices[1].color = Color(1.0f, 0.0f, 0.0f, 1.0f);
_vertices[2].position = Vec3(0.5f, -0.5f, 0.0f);
_vertices[2].color = Color(1.0f, 0.0f, 0.0f, 1.0f);
_vertices[3].position = Vec3(0.5f, 0.5f, 0.0f);
_vertices[3].color = Color(1.0f, 0.0f, 0.0f, 1.0f);
...
// index
// 인덱스 컨테이너에 정보를 저장합니다.
// * 저장하는 방향은 일정해야 합니다.
_indices = { 0, 1, 2, 2, 1, 3 };
인덱스 버퍼 생성 코드
// 버퍼 생성에 사용될 DESC를 생성합니다. D3D11_BUFFER_DESC desc; ZeroMemory(&desc, sizeof(desc)); desc.Usage = D3D11_USAGE_IMMUTABLE; // * D3D11_BIND_INDEX_BUFFER : IndexBuffer를 바인딩하는 용도로 사용하겠다고 설정 desc.BindFlags = D3D11_BIND_INDEX_BUFFER; desc.ByteWidth = (uint32)sizeof(uint32) * _indices.size(); D3D11_SUBRESOURCE_DATA data; ZeroMemory(&data, sizeof(data)); // 첫 번째 데이터의 시작 주소를 저장합니다. data.pSysMem = _indices.data(); // 버퍼를 생성해줍니다. (_indexBuffer에 결과물을 저장합니다.) HRESULT hr = _device->CreateBuffer(&desc, &data, _indexBuffer.GetAddressOf()); CHECK(hr);
인덱스 버퍼 연결 코드
_deviceContext->IASetIndexBuffer(_indexBuffer.Get(), DXGI_FORMAT_R32_UINT, 0);