Я загружаю анимационную модель с помощью DirectX 11. Теперь я нахожусь на этапе анализа файла модели MS3D, и я планирую использовать MS3D SDK() для загрузки модели MS3D. Но похоже, что этот SDK используется для написания плагина в Milkshape Modeling Software, а не в независимой программе. Пример прилагается в SDK представляет собой DLL, как показано ниже:с использованием milkshape3d SDK при загрузке файла MS3D
cMsPlugIn* CreatePlugIn()
{
return new cPlugIn();
}
int cPlugIn::Execute (msModel *pModel)
{
//process the model here.
}
Проблема заключается в том, что я указатель msModel передается в DLL, и я не знаю, как создать его из MS3D файла.
Я прочитал спецификацию этой библиотеки, относящуюся к структуре msModel, так как она указана ниже.
/**********************************************************************
* msModel
**********************************************************************/
MSLIB_API void msModel_Destroy (msModel *pModel);
MSLIB_API int msModel_GetMeshCount (msModel *pModel);
MSLIB_API int msModel_AddMesh (msModel *pModel);
MSLIB_API msMesh* msModel_GetMeshAt (msModel *pModel, int nIndex);
MSLIB_API int msModel_FindMeshByName (msModel *pModel, const char *szName);
MSLIB_API int msModel_GetMaterialCount (msModel *pModel);
MSLIB_API int msModel_AddMaterial (msModel *pModel);
MSLIB_API msMaterial* msModel_GetMaterialAt (msModel *pModel, int nIndex);
MSLIB_API int msModel_FindMaterialByName (msModel *pModel, const char *szName);
MSLIB_API int msModel_GetBoneCount (msModel *pModel);
MSLIB_API int msModel_AddBone (msModel *pModel);
MSLIB_API msBone* msModel_GetBoneAt (msModel *pModel, int nIndex);
MSLIB_API int msModel_FindBoneByName (msModel *pModel, const char *szName);
MSLIB_API int msModel_SetFrame (msModel *pModel, int nFrame);
MSLIB_API int msModel_GetFrame (msModel *pModel);
MSLIB_API int msModel_SetTotalFrames (msModel *pModel, int nTotalFrames);
MSLIB_API int msModel_GetTotalFrames (msModel *pModel);
MSLIB_API void msModel_SetPosition (msModel *pModel, msVec3 Position);
MSLIB_API void msModel_GetPosition (msModel *pModel, msVec3 Position);
MSLIB_API void msModel_SetRotation (msModel *pModel, msVec3 Rotation);
MSLIB_API void msModel_GetRotation (msModel *pModel, msVec3 Rotation);
MSLIB_API void msModel_SetCamera (msModel *pModel, msVec3 Position, msVec2 RotationXY);
MSLIB_API void msModel_GetCamera (msModel *pModel, msVec3 Position, msVec2 RotationXY);
MSLIB_API void msModel_SetComment (msModel *pModel, const char *pszComment);
MSLIB_API int msModel_GetComment (msModel *pModel, char *pszComment, int nMaxCommentLength);
MSLIB_API void msModel_SetFileName (msModel *pModel, const char *pszFileName);
MSLIB_API int msModel_GetFileName (msModel *pModel, char *pszFileName, int nMaxFileNameLength);
Там же функции, как:
msModel_Destroy(msModel *pModel),
но нет никакой функции, как
msModel * msModel_Destroy(char* file_name);
Я хочу спросить, есть ли способ обойти эту проблему?