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개의 댓글

관련 채용 정보