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개의 인덱스 정보를 넣어줌으로써

두개의 삼각형을 그려내었고 그것을 합쳐 사각형을 그려낼 수 있는 것을 확인할 수 있다.

+ Recent posts