기본적으로 Object의 Position, Rotate, Scale값을 변경할때에는
VertexBuffer를 수정하는 것이 아닌 ConstantBuffer를 이용하여 ShaderCode에서 수정한다.
VertexBuffer를 생성할때에 Usage를 IMMUTABLE값으로 줄 뿐만 아니라,
VertexBuffer를 수정하는 것은 원본 자체를 수정하는 것이기 때문에 다양한 이유들로 ConstantBuffer를 사용한다.
아래의 코드는 CPU로부터 0번째 슬롯에 ConstantBuffer를 받아
VS에서 Object의 Position값에 offset을 더해주는 코드이다.
ConstantBuffer를 사용하기 위해선 먼저 Create해줘야하는데
아래와 같이 VertexBuffer를 생성했을 때와 마찬가지인 방법으로 생성해주면 된다.
Usage는 DYNAMIC값을 할당하여 읽기와 쓰기가 모두 가능하도록 설정해준다.
ConstantBuffer를 생성해주었으면 ShaderCode에서 사용할 수 있도록 연결시켜줘야 하는데
아래는 0번째 슬롯에 _ConstantBuffer를 연결시켜 준다는 코드이다.
Object가 X와 Y의 방향으로 계속 이동하는 것을 구현하기 위하여
TransformData.offset의 크기를 매 프레임마다 0.003씩 증가시켜주고
DeviceContext의 Map과 Unmap 함수를 이용하여 TransformData의 값을 ConstantBuffer에 복사해준다.
1. context->Map()을 통해서 CPU에서 데이터를 GPU에 전송하는 데 사용되는 메모리 영역을 인터페이스에 할당한
2. memcpy()를 통해 할당한 메모리 영역에 데이터를 복사한다
3. context->Unmap()을 호출하여 데이터를 GPU에 전송한다.
'DirectX' 카테고리의 다른 글
DX2D) #3 텍스처와 UV (0) | 2024.12.03 |
---|---|
DX2D) #2 삼각형 띄우기 (0) | 2024.10.22 |
DX2D) #1-4 장치초기화_Rendering (1) | 2024.10.09 |
DX2D) #1-3 장치초기화_Viewport (1) | 2024.10.07 |
DX2D) #1-2 장치초기화_RenderTargetView (0) | 2024.10.07 |