Iwao Dev

気付いたことをメモしています.

この画面は、簡易表示です

FBX

FBX SDK 2020.0

FBX SDK のページを見たら新しい 2020.0 があった.
FBX SDK 2020.0
ダウンロードしてインストール.
構成マネージャで 2020.0 用の DebugK と ReleaseK を追加.
「構成マネージャー」で 2020.0 用の追加
追加のインクルードディレクトリを 2020.0 に.
C:\Program Files\Autodesk\FBX\FBX SDK\2020.0\include;%(AdditionalIncludeDirectories)
追加のライブラリディレクトリを 2020.0 に.
C:\Program Files\Autodesk\FBX\FBX SDK\2020.0\lib\vs2017\x64\Release;%(AdditionalLibraryDirectories)
LibXml2 と ZLib をリンク するため,以前にコメントにしていた次の部分を有効に.
LibXml2-MD.lib と ZLib-MD.lib をリンクする様に
これでビルドはできるようになった.
動作確認はこれから.

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ

  • Categories:

FBX SDK の lib ファイル指定

先日,時間があまりとれず 今までの lib の指定 でそのままだった.


FbxSdk.h から順にたどっていくと fbxsdk_version.h があった.
この中に次の様な SDK バージョンが定義されている.

#define FBXSDK_VERSION_MAJOR	2014
#define FBXSDK_VERSION_MINOR	1
#define FBXSDK_VERSION_POINT	0

バージョン文字列は次の様に利用できる.

CString	fsv_str = FS_Ver_Str ;
#ifdef	FBXSDK_VERSION_STRING
//	fsv_str = ::To_tstring(FBXSDK_VERSION_STRING).c_str() ;
	fsv_str =           _T(FBXSDK_VERSION_STRING) ;
#endif

これらを利用した方法で書き換え.


#if		(FBXSDK_VERSION_MAJOR >= 2014)
		#define	FS_VER_GT_2014_00
#endif
#if		(FBXSDK_VERSION_MAJOR >= 2019)
	#if	(FBXSDK_VERSION_MINOR >=    1)
		#define	FS_VER_GT_2019_01
	#endif
#endif

#ifdef	FS_VER_GT_2019_01
	#ifdef	_DLL
		#pragma	comment	(lib, 	"LibXml2-MD.lib")
		#pragma	comment	(lib, 	"Zlib-MD.lib")
	#else
		#pragma	comment	(lib, 	"LibXml2-MT.lib")
		#pragma	comment	(lib, 	"Zlib-MT.lib")
	#endif
#endif

#ifdef	FS_VER_GT_2014_00
	#ifdef	_DLL
		#pragma	comment	(lib, 	"LibFbxSDK-MD.lib")
	#else
		#pragma	comment	(lib, 	"LibFbxSDK-MT.lib")
	#endif
#endif

FBXSDK_VERSION を使用した pragma comment lib の指定

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ


FBX SDK 2019.5

サイトの統計情報を見ていたら,検索キーワードに ” FBX SDK 2019.5 ” があった.
先日調べた時はわからなかったが,2019.5 になったみたい.
https://www.autodesk.com/products/fbx/
FBX SDK 2019.5 ダウンロード


「C/C++」-「全般」-「追加のインクルードディレクトリ」を 2019.5 に.
C:\Program Files\Autodesk\FBX\FBX SDK\2019.2\include;%(AdditionalIncludeDirectories)
C:\Program Files\Autodesk\FBX\FBX SDK\2019.5\include;%(AdditionalIncludeDirectories)
「リンカー」-「全般」-「追加のライブラリディレクトリ」を 2019.5 に.
C:\Program Files\Autodesk\FBX\FBX SDK\2019.2\lib\vs2017\x86\Release;%(AdditionalLibraryDirectories)
C:\Program Files\Autodesk\FBX\FBX SDK\2019.5\lib\vs2017\x86\Release;%(AdditionalLibraryDirectories)

変更する前には,前の設定を残すため「構成マネージャー」でコピーしている.


FBX SDK 2019.0 以前からの更新の場合は libxml2-m?.lib と zlib-m?.lib が増えているのでその変更も必要.
FBX SDK 2019.2 で LNK2019

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ

  • Categories:

FBX SDK 2019.2 で LNK2019

先日の FBX SDK を使用したプロジェクトを VC 2017 と FBX SDK 2019.2 に上げてビルドすると,


LibFbxSDK-MD.lib(fbxmanager.obj) : error LNK2019: 未解決の外部シンボル _xmlCleanupParser が関数 "void __cdecl fbxsdk::Close3rdPartyLibraries(void)" (?Close3rdPartyLibraries@fbxsdk@@YAXXZ) で参照されました。
LibFbxSDK-MD.lib(fbxiosettings.obj) : error LNK2019: 未解決の外部シンボル _xmlStrcmp が関数 "struct _xmlNode * __cdecl fbxsdk::GetChildXmlNode(struct _xmlNode *,class fbxsdk::FbxString *)" (?GetChildXmlNode@fbxsdk@@YAPAU_xmlNode@@PAU2@PAVFbxString@1@@Z) で参照されました。
LibFbxSDK-MD.lib(awCacheDescriptionIO.obj) : error LNK2001: 外部シンボル "_xmlStrcmp" は未解決です。
LibFbxSDK-MD.lib(fbxiosettings.obj) : error LNK2019: 未解決の外部シンボル _xmlNewDoc が関数 "public: virtual bool __thiscall fbxsdk::FbxIOSettings::WriteXMLFile(class fbxsdk::FbxString const &)" (?WriteXMLFile@FbxIOSettings@fbxsdk@@UAE_NABVFbxString@2@@Z) で参照されました。
LibFbxSDK-MD.lib(xmlHelper.obj) : error LNK2001: 外部シンボル "_xmlNewDoc" は未解決です。
...

今まで LibFbxSDK-MD.lib のみだったが,libxml2-md.lib と zlib-md.lib が増えた(分割された?)みたい.
FBX SDK 2019.2 で LNK2019 未解決の外部シンボル
スタティックリンクの場合は,それぞれ LibFbxSDK-MT.lib , LibXml2-MT.lib , zlib-MT.lib .
リンク対象にこれらを加えれば OK .


2019/09/05 FBXSDK_VERSION_MAJOR を利用した方法に変更

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ


VC 2015 x64 プロジェクトで C1128

FBX SDK を使用した VC 2015 x86 プロジェクトを x64 にしたら,
—— ビルド開始: プロジェクト:FBXtoM, 構成:Debug x64 ——
FBXtoM.cpp
FBXtoM.cpp(73): warning C4244: ‘初期化中’: ‘INT_PTR’ から ‘int’ への変換です。データが失われる可能性があります。
FBXtoMDg.cpp
E:\…\FBXtoM\FBXtoMDg.cpp : fatal error C1128: セクションの数がオブジェクト ファイル形式の制限を超えています: /bigobj と共にコンパイルしてください


Release 版では C4244 の warning は出るがビルドできる.
C4244 はアプリケーションクラスの dlg.DoModal の戻り値を int から INT_PTR に.
C1128 の対応は x64 Debug 版の「プロパティ」-「C/C++」-「コマンドライン」-「追加のオプション」に /bigobj を追加.
VC 2015  x64 Debug 版のコンパイルオプション /bigobj

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ


FBX SDK static exe

以前から _AFXDLL となっていたプロジェクトを static にすると,エラーがいっぱい.


今までは,DLL 版のライブラリを使用する様になっていた.
  #if defined (FS_Ver200508)
  // #pragma comment (lib, “FbxSDK_MD.lib”)
  // …
  #elif defined (FS_Ver2011_3_1)
     #ifdef _DEBUG
       #pragma comment (lib, “FbxSDK_md2005D.lib”)
     #else
       #pragma comment (lib, “FbxSDK_md2005.lib”)
     #endif
  #elif defined (FS_Ver2013_3)
     #ifdef _DEBUG
       #pragma comment (lib, “FbxSDK-2013.3-mdD.lib”)
     #else
       #pragma comment (lib, “FbxSDK-2013.3-md.lib”)
     #endif
  #else
       #pragma comment (lib, “LibFbxSDK-MD.lib”)
  #endif


_DLL が定義されているかどうかで振り分け.
  #if defined (_DLL)
     #if defined (FS_Ver200508)
     // …
     #else
       #pragma comment (lib, “LibFbxSDK-MD.lib”)
     #endif
  #else
     #if defined (FS_Ver200508)
     // #pragma comment (lib, “FbxSDK_MT.lib”)
     #elif defined (FS_Ver2011_3_1)
       #ifdef _DEBUG
       #pragma comment (lib, “FbxSDK_mt2005D.lib”)
       #else
       #pragma comment (lib, “FbxSDK_mt2005.lib”)
       #endif
     #elif defined (FS_Ver2013_3)
       #ifdef _DEBUG
       #pragma comment (lib, “FbxSDK-2013.3-mtD.lib”)
       #else
       #pragma comment (lib, “FbxSDK-2013.3-mt.lib”)
       #endif
     #else
       #pragma comment (lib, “LibFbxSDK-MT.lib”)
     #endif
  #endif

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ

  • Categories:

FBX の読込で…

FBX の読込で,2013/05 に作成した exe と上の方向の扱いが異なる.

新しくビルドしたものでは,

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ

  • Categories:

FBX SDK – 2

2005.08 では,調べたかった事(FBX SDK のコンバート動作)がわからなかったので,今度は 2005.12.1 を選択.
{
  KFbxSdkManager* pSdkManager = NULL ;
  KFbxScene* pScene = NULL ;
  if (!::InitializeSdkObjects(pSdkManager,pScene)) { return -1 ; }
  CString fileFBX = _T(“Test.fbx”) ;
  CString pathEXE = ::GetModuleFileName() ;
  CString pathFBX = ::GetFileDir(pathEXE) + _T(“\\”) + fileFBX ;
  if (::LoadScene(pSdkManager,pScene,pathFBX)) {
    CString pathOTH = pathFBX + _T(“.3ds”) ;
    ::SaveScene(pSdkManager,pScene,pathOTH) ; // ,KFbxExporter::e3D_STUDIO_3DS) ;
    }
  ::DestroySdkObjects(pSdkManager) ;
  }
これをコンソールベースで作成,実行すると,3ds のファイルはできた.
dae はデータによるのかどうかわからないがアプリケーションエラーとなる.
dae ファイルはできているがモデルはなさそう.


ダイアログベースに改良.ファイルをドロップすると以下の変換が通る.
  BOOL CFBXtoDlg::Convert(LPCTSTR filePath)
  {
    KFbxSdkManager* pSdkManager = NULL ;
    KFbxScene* pScene = NULL ;
    if (!::InitializeSdkObjects(pSdkManager,pScene)) { return FALSE ; }
    CString pathSrc = filePath ;
    if (::LoadScene(pSdkManager,pScene,pathSrc)) {
      CString path3DS = pathSrc + _T(“.3ds”) ;
      CString pathOBJ = pathSrc + _T(“.obj”) ;
      CString pathDAE = pathSrc + _T(“.dae”) ;
      ::SaveScene(pSdkManager,pScene,path3DS) ;
      ::SaveScene(pSdkManager,pScene,pathOBJ) ;
      ::SaveScene(pSdkManager,pScene,pathDAE) ;
      }
    ::DestroySdkObjects(pSdkManager) ;
    return TRUE ;
    }
2005.08 の example で出来た fbx などをドロップして変換.
FBXto 2012.12.06
ExportScene03.fbx は,3ds への出力でアプリケーションエラー.


FBXto の VC 6 プロジェクトを VC 8 に.単純に変換して,デバッグ版でビルド,実行すると,
MSVCR80.dll が見つからなかったため
—————————
FBXto.exe – コンポーネントが見つかりません
—————————
MSVCR80.dll が見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションをインストールし直すとこの問題は解決される場合があります。
—————————
OK
—————————
リリース版では,実行可能.


2012/12/10 追記
根本的な解決にはなってないが,2011.3.1 SDK に変更して対応.
FBXto.2011.3.1.zip
FBXto 2011.3.1 SDK

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ

  • Categories:

FBX SDK

FBX SDK
FBX SDK Help
FBX SDK Archives


なんとなく FBX 2011.3.1 SDK Static Library を選択
 その中のFBX SDK 2011.3.1 (exe – 459692Kb)


2012/12/05 追記
ここにある一番古い 2005.08 には dsp があるので,VC 6 でいけそう.
examples 内の幾つかのビルドは通り,実行もできる.


新規のコンソール AP のプロジェクトを生成(MFC サポート付き).
examples の ImportScene の main 関数内の一部を _tmain に貼り付け.
プロジェクトのインクルードパスの設定に追加 C:\Program Files\Alias\FBXSDK2005.08\include
同様にリンクの追加ライブラリのパスには   C:\Program Files\Alias\FBXSDK2005.08\Lib
オブジェクトライブラリモジュールへの追加   fbxsdk_md.lib zlib_md.lib
プリプロセッサの定義に次のシンボルを追加 ,K_PLUGIN,K_FBXSDK,K_NODLL,_AFXDLL
プロジェクトの設定は,examples の dsp と比較しながら環境に合ったものに設定.


K_~ が定義されてないと,
——————–構成: T_FBX_2 – Win32 Debug——————–
リンク中…
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: class fbxsdk_2005_08::KFbxScene * __thiscall fbxsdk_2005_08::KFbxSdkManager::CreateKFbxScene(void)” (__imp_?CreateKFbxScene@KFbxSdkManager@fbxsdk_2005_08@@QAEPAVKFbxScene@2@XZ)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: static class fbxsdk_2005_08::KFbxSdkManager * __cdecl fbxsdk_2005_08::KFbxSdkManager::CreateKFbxSdkManager(void)” (__imp_?CreateKFbxSdkManager@KFbxSdkManager@fbxsdk_2005_08@@SAPAV12@XZ)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: bool __thiscall fbxsdk_2005_08::KFbxSdkManager::DestroyKFbxImporter(class fbxsdk_2005_08::KFbxImporter *)” (__imp_?DestroyKFbxImporter@KFbxSdkManager@fbxsdk_2005_08@@QAE_NPAVKFbxImporter@2@@Z)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: void __thiscall fbxsdk_2005_08::KFbxImporter::SetPassword(char *)” (__imp_?SetPassword@KFbxImporter@fbxsdk_2005_08@@QAEXPAD@Z)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: bool __thiscall fbxsdk_2005_08::KFbxImporter::Import(class fbxsdk_2005_08::KFbxScene &,class KStreamOptions *)” (__imp_?Import@KFbxImporter@fbxsdk_2005_08@@QAE_NAAVKFbxScene@2@PAVKStreamOptions@@@Z)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: void __thiscall fbxsdk_2005_08::KFbxImporter::SetState(enum fbxsdk_2005_08::KFbxImporter::EImportState,bool)” (__imp_?SetState@KFbxImporter@fbxsdk_2005_08@@QAEXW4EImportState@12@_N@Z)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: class fbxsdk_2005_08::KFbxTakeInfo * __thiscall fbxsdk_2005_08::KFbxImporter::GetTakeInfo(int)” (__imp_?GetTakeInfo@KFbxImporter@fbxsdk_2005_08@@QAEPAVKFbxTakeInfo@2@H@Z)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: int __thiscall fbxsdk_2005_08::KFbxImporter::GetTakeCount(void)” (__imp_?GetTakeCount@KFbxImporter@fbxsdk_2005_08@@QAEHXZ)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: enum fbxsdk_2005_08::KFbxImporter::EFileFormat __thiscall fbxsdk_2005_08::KFbxImporter::GetFileFormat(void)” (__imp_?GetFileFormat@KFbxImporter@fbxsdk_2005_08@@QAE?AW4EFileFormat@12@XZ)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: __thiscall KString::~KString(void)” (__imp_??1KString@@QAE@XZ)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: void __thiscall fbxsdk_2005_08::KFbxImporter::GetFileVersion(int &,int &,int &)” (__imp_?GetFileVersion@KFbxImporter@fbxsdk_2005_08@@QAEXAAH00@Z)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: static void __cdecl fbxsdk_2005_08::KFbxIO::GetCurrentVersion(int &,int &,int &)” (__imp_?GetCurrentVersion@KFbxIO@fbxsdk_2005_08@@SAXAAH00@Z)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: enum fbxsdk_2005_08::KFbxIO::EError __thiscall fbxsdk_2005_08::KFbxIO::GetLastErrorID(void)” (__imp_?GetLastErrorID@KFbxIO@fbxsdk_2005_08@@QAE?AW4EError@12@XZ)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: void __thiscall fbxsdk_2005_08::KFbxImporter::SetFileFormat(enum fbxsdk_2005_08::KFbxImporter::EFileFormat)” (__imp_?SetFileFormat@KFbxImporter@fbxsdk_2005_08@@QAEXW4EFileFormat@12@@Z)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: class fbxsdk_2005_08::KFbxImporter * __thiscall fbxsdk_2005_08::KFbxSdkManager::CreateKFbxImporter(void)” (__imp_?CreateKFbxImporter@KFbxSdkManager@fbxsdk_2005_08@@QAEPAVKFbxImporter@2@XZ)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: __thiscall KString::KString(void)” (__imp_??0KString@@QAE@XZ)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: int __thiscall KString::CompareNoCase(char const *)const ” (__imp_?CompareNoCase@KString@@QBEHPBD@Z)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: class KString __thiscall KString::Right(unsigned int)const ” (__imp_?Right@KString@@QBE?AV1@I@Z)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: unsigned int __thiscall KString::GetLen(void)const ” (__imp_?GetLen@KString@@QBEIXZ)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: int __thiscall KString::ReverseFind(char)const ” (__imp_?ReverseFind@KString@@QBEHD@Z)” は未解決です
T_FBX_2.obj : error LNK2001: 外部シンボル “”__declspec(dllimport) public: __thiscall KString::KString(char const *)” (__imp_??0KString@@QAE@PBD@Z)” は未解決です
Debug/T_FBX_2.exe : fatal error LNK1120: 外部参照 21 が未解決です。
link.exe の実行エラー
T_FBX_2.exe – エラー 22、警告 0


どこが悪いのかよくわからないが,
Detected memory leaks!
Dumping objects ->
{29077} normal block at 0x00DC9DD8, 456 bytes long.
Data: <  p d p p t     > D4 C3 70 00 64 C3 70 00 70 C9 74 00 00 00 00 00
Object dump complete.
スレッド 0x17D0 終了、終了コード 0 (0x0)。
確保されるのは,KFbxImporter::Import(KFbxScene&, KStreamOptions*) を呼出した時.

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ



    top

    %d人のブロガーが「いいね」をつけました。