📒 사각형 그리기
사각형을 그릴 땐 삼각형 두개가 필요하다.
해당 삼각형 두개를 그리기 위한 각각의 정점 6개를 모두 Vertex Buffer에 추가하여 그려도 사각형은 정상적으로 출력되지만, Draw Call을 줄여 프로그램의 효율을 높이기 위한 방법으로 Index Buffer를 활용하는 것이 좋다.
이때 삼각형은 무조건 시계방향으로 그려주어야 한다.
DX는 왼손 좌표계를 사용해서 도형을 그릴 때 시계방향으로 그려야 화면에 보인다. 원래 DX9가 왼손 좌표계이고 DX10부터는 오른손 좌표계인데 지금까지 나온 책들이 DX9를 기반으로 작성돼서 왼손 좌표계로 써져있는게 많다.
그리고 엔진도 다 왼손 좌표계여서 왼손좌표계에 익숙해지는게 좋다.
📙 Index Buffer
사각형을 그릴때 정점(Vertex)를 재활용하여 사용할 때 해당 정점들(x, y)을 담아두는 것을 Vertex buffer라고 하고, 그려질 정점의 순서들 (0,1,2,2,1,3)을 담아두는 것을 Index Buffer라고 한다.
(정점의 순서는 시계방향이기만 하면 되고, 0부터 시작하지 않고 1,2,0 으로 그려도 상관없다)
사각형을 그릴 때 겹쳐지는 정점들을 제외하면 총 4개의 정점이 필요하다. 해당 정점들에 Index 번호를 지정한 뒤 겹쳐지는 정점들도 무한으로 사용할 수있도록 Index 번호를 담아서 사용한다.
Index Buffer를 사용하면 속도도 빠르고 메모리도 절약된다. 사각형을 그릴때 필요했던 정점 6개를 겹치는 정점2개를 재활용하여 Vertex버퍼의 용량이 줄어들게된다. (Index Buffer는 늘어남)
❓ Vertex Buffer 용량은 줄어도 Index Buffer 용량이 커지는데 이게 효율적인게 맞나?
Vertex버퍼는 vector3의 자료형만 사용하는 것이 아니라, 이미지, 노멀, 탄젠트 등을 사용하면 Vector2, Vector3, Vector4,,, 등등 Vertex버퍼가 사용하는 Byte수가 매우 많다. (2D에서만 이정도고 3D가면 몇천개 몇만개가 늘어난다)
따라서 Vertex버퍼를 줄이고 Index Buffer를 늘이는것이 메모리 절약에도 훨씬 도움이되고 속도도 빨라진다.
[ 출력 결과 ]
'🎨DirectX' 카테고리의 다른 글
[DX] 그리드(Grid) 그리기, 그리드 공식 (0) | 2023.02.04 |
---|---|
[DX] World행렬 (크기 변환 행렬) (0) | 2023.02.04 |
[DX] 컴퓨터 구조(CPU-RAM/GPU-VRAM), PrimitiveTopology (기본 도형 위상 구조) (0) | 2023.02.04 |
[DX] Shader Code, 쉐이더 기초 작성 (정점 출력 쉐이더 코드) (0) | 2023.02.04 |
[DX] 렌더링 파이프라인, 공간변환 (0) | 2023.02.04 |