CreateInputLayout 도중 Offset 관련하여
409
작성한 질문수 16
강의를 듣고 있는 도중 질문이 하나 생겼습니다 강의 16:05 부분입니다.
강사님께서 CreateInputLayout을 하기 위해 이전 작업으로 D3D11_INPUT_ELEMENT_DESC라는 구조체를 만드셨고 내부의 요소로 UINT AlignedByteOffset; 이러한 변수가 있었습니다.
강의에서 강사님께서 이 부분은 변수가 시작되는 지점을 적는 변수라고 알려주시고 Color가 시작되는 지점이 12Byte라고 하셨는데 이 D3D11_INPUT_ELEMENT_DESC라는 구조체로 설명하려하는 것이 이 전에 선언해두었던
struct Vertex
{
Vec3 position;
Color color;
};
라는 구조체였다면 구조체의 메모리 패딩에 따라 제일 큰 변수의 메모리 크기씩 영역이 쪼개져서 16Byte씩 끊어지니깐 position은 0 ~ 12구간 그리고 12 ~ 16 구간은 메모리 패딩으로 인해 비어져 있고 16 ~ 32까지가 color가 있는 구간으로 알고있었습니다 그래서 제가 잘못 생각하고 있는건가해서 12대신 16을 넣어봤는데 정상적인 색이 안나오지 않더라고요.
제가 개념을 잘못 알고있는건가 아니면 제대로 알고 있는데 이 부분만 특수한 케이스로 12라고 입력이 된건가를 잘 모르겠어서 개념을 확실히 잡고 가야된다고 생각해서 질문 드립니다 혹시 어디가 잘못된 건지 알려주실 수 있으신가요?
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
D3D11_INPUT_ELEMENT_DESC 구조체의 AlignedByteOffset 멤버 변수는 입력 요소가 시작되는 지점의 바이트 오프셋을 나타내는 변수입니다. 이 값은 구조체의 메모리 패딩이 적용된 이후의 바이트 위치를 나타냅니다.
예를 들어, struct Vertex{ Vec3 position; Color color; }; 구조체의 경우 position 멤버 변수가 0 ~ 12 바이트를 차지하고, 12 ~ 16 바이트는 메모리 패딩으로 비워져 있습니다. 그리고 color 멤버 변수가 16 ~ 32 바이트를 차지하게 됩니다.
강사님께서 강의 중에 “Color가 시작되는 지점은 12 바이트이다”라고 설명하셨을 때, 이는 position 멤버 변수 다음 바이트 위치인 12 바이트를 의미합니다. 구체적인 코드나 강의 내용이 없어서 더 정확한 해석이 어렵지만, 일반적인 경우에는 position 멤버 변수의 크기가 12 바이트이고, color 멤버 변수가 바로 그 뒤에 위치하게 됩니다.
따라서, CreateInputLayout을 호출할 때 AlignedByteOffset 멤버 변수에는 12 대신 16을 넣으시면 정상적인 동작을 기대할 수 있을 것입니다. 값이 정상적인 색상이 나오지 않을 때에는 다른 부분에서의 오류가 있을 수 있으니, CreateInputLayout 호출 시 다른 인자들도 재확인하는 것이 좋습니다.
더 자세한 내용이 필요하신 경우에는 구체적인 코드나 강의 내용을 공유해주시면 더 정확한 답변을 드릴 수 있을 것입니다. 감사합니다.
0

여기서 offset 칸에 12를 넣었더니 잘 작동되고 16을 넣으니 제대로 작동이 안되더라고요 그래서 혹시나 구조체 크기를 재봤더니 28Byte더라고요 Vec3 + Color이면 12 + 4(패딩) + 16 = 32인데 왜 28이지 하면서 검색해봤더니 컴파일러가 64비트 기준으로 운영되서 구조체 내부에 64비트가 넘는 자료형이 있으면 컴파일러가 더 이상의 패딩을 포기한다고 하네요 그래가지고 원래 패딩이 되면 16Byte 위치에 와야되는 변수가 12Byte 위치에 와서 offset이 12라고 했을때가 정상 작동했나 싶기도 한데 이건 어떻게 생각하세요?
assimp-vc143-mtd.dll가 없어서 코드 실행을 진행할 수 없습니다 라는 에러가 뜹니다.
0
87
2
Model.cpp에서 ReadMaterial()의 SpecularTexture 부분 질문입니다.
0
57
0
노멀매핑 자료
0
77
1
셰이더 인텔리센스 문제
0
81
1
4강 삼각형띄우기 오류관련 질문있습니다
0
71
1
64.애니메이션 강의의, AssimpTool 에서 FBX 애니매이션 데이터를 옮길 때의 강의 오류가 있는 것 같습니다.
1
65
1
SkyDemo에서 카메라 입력이 작동하지 않는 문제
0
84
2
섹션6. DirectX 11 3D 입문 강의부터 렌더링이 안됩니다
0
133
2
텍스처와 UV 강의 관련해서 문의드려요
0
165
2
frame간 보간에 대해서 질문이있습니다.
1
132
1
자료 pptx가 아닌 pdf
0
109
1
어디에 좀더 집중해야하나 고민입니다
0
203
1
CameraPosition 질문있습니다
1
114
1
안녕하세요 roatation 행렬 질문있습니다.
1
156
2
'C\ .... ......lib'은 올바른 win32에플리케이션이 아닙니다.
0
525
4
버텍스버퍼 실습 도중 버그
0
176
1
물방울 책 실습은 어디까지 하는건가요??
0
408
2
리소스매니저의 get함수에서 에러가 나요
0
133
2
자식 GameObject SetPosition 시 움직이지 않음
0
102
1
강의 끝나고 3D 포폴
0
320
2
공부 방법에 대해서 문의 드려요
0
155
1
19분 5초에 함수 구현부 한꺼번에 만드는법
1
154
1
좌표계 변환 행렬이랑 srt 변환 행렬
0
206
2
SRT 행렬중에 ppt 질문 있습니다.
0
169
1





