FBX SDK
모델 파일을 읽어 들일 때 사용하는 라이브러리
FBX 파일에는 정점, 머테리얼, 애니메이션 등의 정보가 담겨 있음
FBX loader 클래스 구현
FBX 파일을 읽어 우리가 사용할 구조에 맞게 로드하는 클래스 구현
mesh data 클래스 구현
class MeshData : public Object
{
public:
...
public:
static shared_ptr<MeshData> LoadFromFBX(const wstring& path);
...
private:
shared_ptr<Mesh> _mesh;
vector<shared_ptr<Material>> _materials;
vector<MeshRenderInfo> _meshRenders;
};
FBX에서 읽어온 데이터들을 담고 있을 클래스
FBX는 다중 메쉬를 지원하며,
정점의 다중 인덱스를 지원 (부위별 분리를 위해) 및 다중 머테리얼 또한 지원
mehs 클래스 수정
class Mesh : public Object
{
public:
...
void Render(uint32 instanceCount = 1, uint32 idx = 0);
void Render(shared_ptr<class InstancingBuffer>& buffer, uint32 idx = 0);
static shared_ptr<Mesh> CreateFromFBX(const struct FbxMeshInfo* meshInfo);
...
vector<IndexBufferInfo> _vecIndexInfo;
};
FBX 파일이 다중 메쉬를 지원하기 때문에
인덱스 버퍼를 벡터에 저장하여 사용하도록 수정
mesh renderer 클래스 수정
class MeshRenderer : public Component
{
public:
...
void SetMaterial(shared_ptr<Material> material, uint32 idx = 0);
...
private:
...
vector<shared_ptr<Material>> _materials;
};
FBX 파일이 다중 머테리얼를 지원하기 때문에
머테리얼을 벡터에 저장하여 사용하도록 수정
모델들이 노말 텍스쳐는 있어도 탄젠트 텍스쳐는 없는 경우가 많음
그렇기 때문에 파일 로드 시에 없을 경우 따로 계산을 해야 함