Index Buffer
- Vertex buffer만을 사용할 경우 중복되는 정점을 따로 저장해야 한다는 단점이 생긴다. (정점의 갯수가 많아져 연산량이 훨씬 많게된다)
- Index buffer는 이를 해결하기 위함으로, Vertex buffer 내에 존재하는 정점을 재활용 함으로써 정점의 갯수를 줄여서 사용할 수 있게 한다.
- Vertex buffer를 생성하는 것과 아주 비슷하게 Index buffer를 추가적으로 생성하여 Index 정보를 넣어줌으로써 간단하게 사용이 가능하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #include "pch.h" #include "Game.h" #include "Engine.h" shared_ptr<Mesh> mesh = make_shared<Mesh>(); shared_ptr<Shader> shader = make_shared<Shader>(); void Game::Init(const WindowInfo& info) { GEngine->Init(info); vector<Vertex> vec(4); vec[0].pos = Vec3(-0.5f, 0.5f, 0.5f); vec[0].color = Vec4(1.f, 0.f, 0.f, 1.f); vec[1].pos = Vec3(0.5f, 0.5f, 0.5f); vec[1].color = Vec4(0.f, 1.f, 0.f, 1.f); vec[2].pos = Vec3(0.5f, -0.5f, 0.5f); vec[2].color = Vec4(0.f, 0.f, 1.f, 1.f); vec[3].pos = Vec3(-0.5f, -0.5f, 0.5f); vec[3].color = Vec4(0.f, 1.f, 0.f, 1.f); vector<uint32> indexVec; { indexVec.push_back(0); indexVec.push_back(1); indexVec.push_back(2); } { indexVec.push_back(0); indexVec.push_back(2); indexVec.push_back(3); } mesh->Init(vec, indexVec); shader->Init(L"..\\Resources\\Shader\\default.hlsli"); GEngine->GetCmdQueue()->WaitSync(); } void Game::Update() { GEngine->RenderBegin(); shader->Update(); { Transform t; t.offset = Vec4(0.f, 0.f, 0.f, 0.f); mesh->SetTransform(t); mesh->Render(); } GEngine->RenderEnd(); } | cs |
- 위 코드를 보면 총 4개의 정점을 사용하고 index buffer를 통해 0, 1, 2 정점이 연결관계이고, 0, 2, 3 정점이 연결관계임을 알려주는 방법으로 4개의 정점으로 사각형을 표현하고 있다.
위에서 설명했듯 총 4개의 정점을 사용하였고, 6개의 인덱스 정보를 넣어줌으로써
두개의 삼각형을 그려내었고 그것을 합쳐 사각형을 그려낼 수 있는 것을 확인할 수 있다.
'Grahpics' 카테고리의 다른 글
[Graphics] DirectX12 - Depth Stencil View (0) | 2022.01.29 |
---|---|
[Graphics] DirectX12 - Texture Mapping (0) | 2022.01.28 |
[Graphics] DirectX12 - Root Signature (루트서명) (0) | 2022.01.12 |
[Graphics] DirectX12 - Constant Buffer (상수버퍼) (0) | 2022.01.12 |
[Graphics] DirectX12 - 삼각형 그리기 (0) | 2022.01.12 |