[DX] 정점 버퍼(Vertex Buffer)

김진우·2025년 7월 21일

DirectX

목록 보기
24/32
post-thumbnail

정의

정점 버퍼(Vertex Buffer)는 3D모델의 정점 데이터를 GPU에 전달하기 위한 기본적인 구조이다.
이 버퍼를 통해 정점 데이터(위치, 색상, 법선, 텍스처 좌표 등)를 그래픽 파이프라인에 공급할 수 있다.

정점

3D 모델을 구성하는 기본 단위로, 보통 다음의 데이터를 포함한다.

  • 위치(Position): float3 (x, y, z)
  • 색상(Color): float4 또는 uint32
  • 텍스처 좌표(UV): float2
  • 법선 벡터(Normal): float3
  • 탄젠트(Tangent): float3
    등등

특징

항목설명
용도GPU로 정점 데이터를 전달
위치GPU 메모리(일반적으로 VRAM)에 존재
접근 방식일반적으로 CPU는 접근 불가 (D3D11_USAGE_DEFAULT)
데이터 형식커스텀 구조체를 배열로 저장
함께 쓰이는 요소입력 레이아웃, 셰이더, 인덱스 버퍼

정점 버퍼 생성 과정

1. 정점 구조체 정의

struct Vertex {
    DirectX::XMFLOAT3 position;
    DirectX::XMFLOAT4 color;
};

2. 정점 데이터 배열 정의

Vertex vertices[] = {
    { { 0.0f, 0.5f, 0.0f }, { 1.0f, 0.0f, 0.0f, 1.0f } },
    { { 0.5f, -0.5f, 0.0f }, { 0.0f, 1.0f, 0.0f, 1.0f } },
    { { -0.5f, -0.5f, 0.0f }, { 0.0f, 0.0f, 1.0f, 1.0f } },
};

3. 버퍼 설명 구조체 작성 (D3D11_BUFFER_DESC)

D3D11_BUFFER_DESC bufferDesc = {};
bufferDesc.Usage = D3D11_USAGE_DEFAULT;
bufferDesc.ByteWidth = sizeof(vertices);
bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
bufferDesc.CPUAccessFlags = 0;

4. 초기화 데이터 설정 (D3D11_SUBRESOURCE_DATA)

D3D11_SUBRESOURCE_DATA initData = {};
initData.pSysMem = vertices;

5. 버퍼 생성 (ID3D11Device::CreateBuffer)

ID3D11Buffer* vertexBuffer = nullptr;
device->CreateBuffer(&bufferDesc, &initData, &vertexBuffer);

0개의 댓글