-
DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 6 - 2Graphics/DX11 물방울책 연습문제 풀이 2021. 3. 21. 01:27
문제
예제 소스에 나와있던 Vertex구조체는 멤버 변수가 2개(Position과 Color)였으나 문제에서는 각자 구조체로 나누고 그것을 정점 버퍼에 담아 사용하도록 제시했습니다.
해결
기존 예제소스는 하나의 InputSlot에 2개의 속성들을 어떻게 메모리에 넣을 것인지 정의했다. 이번 문제는 InputSlot을 하나가 아닌 2개로 사용하여 정의해보도록 하겠다.
InputSlot을 2개 사용하기 위해서 POSITION은 0번째, COLOR는 1번째로 정의하였다.
여기서 byteoffset은 같은 InputSlot을 이용할때 구조체 멤버 변수가 두 개 이상이라면 그 변수들에 대한 byte값을 계산해야 한다. 첫 번째 변수는 당연히 0이지만 n번째 매개변수의 경우 sizeof(2번째 멤버 변수 자료형)+sizeof(1번째)+...+sizeof(n번째)로 계산해야 한다. 소스코드에서는 둘 다 0으로 되어있는데 기존 버텍스는 포지션과 컬러를 가지고 있었지만 2개의 버퍼로 나누기 위해 포지션 버텍스와 컬러 버텍스로 나누었다. 그래서 각 버텍스의 멤버 변수는 1개밖에 없으므로 byteoffset은 당연히 0이다.
물론 버퍼만 이렇게바꾸면 안 되고 나머지 소스도 조금 바꿔줘야 한다.
Vertex는 기존에 Position과 Color를 가지고 있었으나 2개의 버퍼를 쓰기 위해 구조체 또한 2개로 나누었으며 버텍스 배열 또한 마찬가지이다.
그리고 Color Buffer를 정의 및 생성한다. 위 사진에서는 변수 하나하나 값을 할당하였지만 가능하면 ZeroMemory함수를 사용하는 것을 추천한다. 초보자라면 구조체 변수가 어떤 게 있는지 알기 힘들 수도 있으며 실수로 뭐 하나 할당 안 해줘서 쓰레기 값으로 인한 에러가 떠버리는 불상사가 발생할 수도 있기 때문이다. 내가 그거 때문에 원인 찾느라 고생했다.
마지막으로 버퍼들을 파이프라인에 공급하면 끝이다.
'Graphics > DX11 물방울책 연습문제 풀이' 카테고리의 다른 글
DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 6 - 10 (0) 2021.03.23 DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 6 - 8 (0) 2021.03.21 DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 6 - 7 (0) 2021.03.21 DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 6 - 4 (0) 2021.03.21 Directx11 물방울책 연습문제 풀이 스타트 (0) 2021.03.18