pMesh->CloneMesh()
복제된 메시를 생성한다.
현재 메시를 메시컨터이너의 메시에 저장하고있다.
pMeshContainer->MeshData.Type에 메시타입을 넣어준다(열거체중에 하나)
메시들의 수 NumMaterials를 채워주자
pMeshContainer-> NumMaterials = NumMaterials;
다음 이수 만큼 텍스처들을 로드해주자.
{
하이어라키로드의 Create에 메시파일의 경로를 받도록 변경하자.
이제 경로를 받아왔으니 NumMaterials만큼 for문을 돌며
szFUllPath에 받아온 경로 m_pMsehFilePath를 넣어주고
pMaterials[i].pTextureFilename을 MultiBytteToWideChar()로 tchar로 변경해주고
fullPath에 넣어주자.
_D -> _N -> _S로 변경하면수 불러오기위해 확장자명의 시작인 .를 찾자
일단 먼저 D로 되어있는 상태이니 메쉬컨테이너의 p_Material에 넣어주자.
맵들을 저장할수있게 구조체를 동적할당해주자.
{
lstrlen(szFullPath)로 널문자를 제외한 문자열의 길이를 받아오고
끝에서부터 . 를 탐색한다. (iLength에서 1씩 빠지면)
.을찾았을때
i-1이 바꿔주고싶은 문자자리이니 이를 N으로 바꿔준다.
}
이때 바꿔야하는 인덱스를 저장해두고 다음 S로 바꿀떄도 활용하자.
N이랑 S는 없을수도있다 Return해주지 말자.
텍스처로드 끝
pMeshContainerAdjacency에 값을 채워주자
우선 _ulong배열을 동적할당해주자.
갯수는 메시컨터이네안에의 메시데이터 안의 피메시 안에 GetNumFaces로 면의갯수를 구할수있다. 면의갯수 * 3
다음 memcpy로 값을 채워주자.
다음 skininfo의 값을 채워주자
skininfo : 현재 메시 피부(현재메시를 구성하고있는 정점) 정점에 영향을 미치는 뼈의 갯수,어떤 뼈의 영향을 받아야하는지를 가지고있다. 메쉬컨테이너당 하나의 스킨인포를 가지고있다.
스킨인포는 뼈들의가지고있는 행렬정보를 정점에 곱해주는 역할도 수행한다.
하드웨어 스키닝 -> 뼈들의 행렬정보를 곱해주는 작업을 CPU가아닌 GPU에서 해준다.
우선은 소프트웨어 스키닝으로
이제 메시컨테이너의 멤버변수를 추가한다.
우선 영향을 끼치는 뼈의갯수를 저장해둔다.
D3DXMeshContainerDerivec에
//뼈의 스페이스에서 로컬스페이스로 이동시키기위한 행렬
//뼈의 로컬과 메시의 로컬은 다르다.
//뼈의로컬에서 메시의 로컬로 이후 뼈의 상태변환행렬을 곱해서 렌더링 행렬을 만든다.
D3DXMATRIX pOffseMatrices =nullptr;
//뼈의 상태변환행렬을 누적시킨 행렬
D3DXMATRIX** ppCombindTransformationMatrices =nullptr;
//화면에 그리기위한 행렬
D3DXMATRIX pRenderlingMatrices = nullptr;
//현재 메시컨테이너에 영향을 미치는 뼈의 갯수
unsigned int iNumBones = 0;