불러온 FBX 파일 데이터를 파일입출력을 통해 저장
- FBX는 씬, 카메라, 조명과 같은 다양한 정보들을 포함하고 있다.
- FBXLoader 클래스는 여기서 메쉬에 해당하는 것들만 추출해서 저장하는 역할을 하는데, 트리를 재귀적으로 탐색하는 구조다보니, 시간이 오래 걸린다는 단점이 있다.
- 애니메이션 클립의 경우 최종 행렬을 구하는 로직이 모든 부모 좌표계로 향하는 행렬을 곱해줘서 구하는 구조이기 때문에 이 부분이 특히 시간이 오래 걸린다.
- 한 번 불러오고 난 후에는 그냥 불러온 데이터를 파일입출력을 통해 바이너리로 저장하고 다음부턴 그 파일을 다시 불러오는 식으로 구현하면 빠르지 않을까?
- 오랜만에 파일 입출력을 사용해서 꽤나 애먹긴 했지만, 그래도 나름 성공적으로 구현했다.
void MeshData::Save(const wstring& _path)
{
if (true == fs::exists(_path))
return;
FILE* pFile = nullptr;
_wfopen_s(&pFile, _path.c_str(), L"wb");
AssertEx(nullptr != pFile, L"MeshData::Save() - 파일 생성 실패!, 이미 존재하는 파일명일 수 있음");
AssertEx(nullptr != mpMesh, L"MeshData::Save() - 메쉬가 존재하지 않는 MeshData를 저장하려는 시도");
UINT32 containerSize = mpMesh->GetMeshContainerCount();
fwrite(&containerSize, sizeof(UINT32), 1, pFile);
for (UINT i = 0; i < containerSize; ++i)
{
MeshContainer* pMeshContainer = mpMesh->GetMeshContainer(i);
VertexBufferInfo& vtxInfo = pMeshContainer->vertexBufferInfo;
fwrite(&vtxInfo.count, sizeof(UINT32), 1, pFile);
fwrite(vtxInfo.pData, sizeof(Vertex), vtxInfo.count, pFile);
UINT32 indexBufferCount = static_cast<UINT32>(pMeshContainer->indexBufferGroup.size());
fwrite(&indexBufferCount, sizeof(UINT32), 1, pFile);
for (UINT32 j = 0; j < indexBufferCount; ++j)
{
IndexBufferInfo& idxInfo = pMeshContainer->indexBufferGroup[j];
fwrite(&idxInfo.count, sizeof(UINT32), 1, pFile);
fwrite(idxInfo.pData, sizeof(int), idxInfo.count, pFile);
}
}
bool bIsMaterial = nullptr != mpMaterial;
fwrite(&bIsMaterial, sizeof(bool), 1, pFile);
if (true == bIsMaterial)
mpMaterial->Save(pFile);
fclose(pFile);
}
- 아무 생각없이 &vtxInfo.pData라고 적었다가 한참 헤맸다... pData는 void형 포인터라서 주소로 넘기면 안되기 때문
- 요약하면 정점 정보와 인덱스 정보를 파일에 저장해놨다가 불러오는 것이다.
- 이전 포트폴리오 작업할 때 맵 구성요소를 파일로 다루기 위해 파일 입출력을 사용했던게 나름 도움이 되었다.
내일 할 일
- 애니메이션/본 구조도 파일에 병합
- ImGui 합치기
'게임 개발 > [D3D_Portfolio] DirectX3D 팀 포트폴리오 작업일지' 카테고리의 다른 글
18. 그림자 완성 (2) | 2023.10.07 |
---|---|
17. PhysX를 이용한 Mesh Collider 구현 (0) | 2023.09.12 |
15. 맵 제작 작업 진행 (0) | 2023.08.22 |
14. HDR 구현 및 림 라이트 구현 (0) | 2023.08.18 |
13. 회의 및 짐벌락 문제 해결 & 몬스터 데드 셰이더 구현 (0) | 2023.08.15 |
댓글