Index buffer

ㅋㅋ·2022년 7월 18일
0

DirectX12강의

목록 보기
7/39

vertex buffer만 사용하는 경우

메쉬가 이어지는 부분에 정점이 중첩되게 됨

=>

사각형을 만들면 vertex 2개가 낭비되며 비효율적임


vertex + index buffer

vertex buffer 정점들의 데이터 (중첩되는 부분은 제거)

index buffer 삼각형의 정점 인덱스들을 모은 데이터

vertex buffer의 정점 정보를 참고하여 index buffer의 인덱스들로 삼각형을 만들게 됨

삼각형이 인덱스로 관리되기 때문에 중첩되는 부분은 같은 삼각형 정보를 참고할 수 있음


ComPtr<ID3D12Resource>		_indexBuffer;
D3D12_INDEX_BUFFER_VIEW		_indexBufferView;
uint32 _indexCount = 0;

메쉬에 인덱스 버퍼 추가


void Mesh::CreateIndexBuffer(const vector<uint32>& buffer)
{
	_indexCount = static_cast<uint32>(buffer.size());
	uint32 bufferSize = _indexCount * sizeof(uint32);

	...

	_indexBufferView.BufferLocation = _indexBuffer->GetGPUVirtualAddress();
	_indexBufferView.Format = DXGI_FORMAT_R32_UINT;
	_indexBufferView.SizeInBytes = bufferSize;
}

인덱스 버퍼를 생성하는 부분의 구현은 vertex 구현과 거의 동일

데이터 크기가 vertex에서 int형으로 변경


void Mesh::Render()
{
	CMD_LIST->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
	CMD_LIST->IASetVertexBuffers(0, 1, &_vertexBufferView); // Slot: (0~15)
	CMD_LIST->IASetIndexBuffer(&_indexBufferView);

	...

	//CMD_LIST->DrawInstanced(_vertexCount, 1, 0, 0);
	CMD_LIST->DrawIndexedInstanced(_indexCount, 1, 0, 0, 0);
}

메쉬가 렌더링되는 부분을 수정

IASetIndexBuffer 함수로 index buffer view 요청을 추가

DrawInstanced 함수는 vertex buffer만 사용하여 렌더링하는 함수

DrawIndexedInstanced 함수를 이용하여 index buffer를 사용하여 렌더링하도록 수정

0개의 댓글