FBX2019.0
その1 インストールとプロジェクトの設定
今(2018.11)を去る事10年前、「FBX習得編」でFBX SDKを通してFBXファイルからモデルの情報を取り出す方法について書き連ねました。あれから10年、FBX
SDKも随分と進化(?)し、使い方もかなり変わってしまいました。その為、多くの方から「掲載されている方法が最新版では上手くいかない…」とご指摘を頂いておりました。そこで、改めて今の最新版で10年前と同様の情報を取り出す方法についてまとめてみます。
@ SDKのダウンロードとインストール
FBX SDKはAutodeskの「AutoDesk FBX Software Developer Kit」からダウンロードできます。2018.11現在の最新版はFBX SDK2019.0です。Windowsの場合はVisualStudioでの使用が推奨されているため、各VSのバージョン別にダウンロードできるようになっています。が、2015までしかありません…。私はVS2017しか今は無いのですが、まぁ何とかなりますので、気にせずDLしましょうww
DLしたインストーラを起動してインストールして下さい。デフォルトで「C:\Program Files\Autodesk\FBX\FBX SDK\2019.0」に展開されます。このパスは重要なので忘れずに。インストールが終了後の先のパス内はこういう構成になっています:
includeにはプログラムで使うヘッダーが入っています。後々パスを通す必要のあるフォルダです。libにはライブラリ(.lib)があります。実際に使用するにはライブラリをリンクする必要もあります。samplesフォルダは意外と大切で「FBXの使い方はほぼここに凝縮している」と言っても過言ではありません。FBX_SDK_Online_Documentation.htmlはオンラインドキュメントを開いてくれます。このドキュメント、10年前より格段に良くなりました(涙)。
A プロジェクトの設定
FBX SDKを使いたい場合、VSのプロジェクト内にFBX SDKのヘッダーとライブラリを導入する必要があります。
VSで新規C++プロジェクト(もしくは既存プロジェクト)を立ち上げ、プロジェクトのプロパティを開きます。[構成プロパティ]→[C/C++]の[追加のインクルードディレクトリ]に先ほどのincludeパス(C:\Program
Files\Autodesk\FBX\FBX SDK\2019.0\include)を指定します。このパス内に唯一あるfbxsdk.hが他の様々なサブヘッダーを自動的にインクルードしてくれます。
次にライブラリをリンクするため、[構成プロパティ]→[リンカー]→[全般]にある[追加のライブラリディレクトリ]に使用するライブラリへのパスを指定します。このパスですが「C:\Program Files\Autodesk\FBX\FBX SDK\2019.0\lib\vs2015\x86\debug」太文字部分がDLしてきたパッケージやプロジェクトの構成によって変わります。VS2015用だとvs2015になります。プロジェクトの構成が32bitアプリケーションを作る場合はx86、64bitならx64にしなければなりません。またデバッグ版の場合はdebug、リリース版ならreleaseにする事をお勧めします。
続いてライブラリファイル(.lib)を組み込むため同じく[リンカー]→[入力]にある[追加の依存ファイル]にライブラリファイル名を指定します。先に指定したライブラリパス内を見ると:
このように.libファイルが3つあります。libfbxsdk-md.libはC++ランタイムライブラリとしてマルチスレッドDLLを使っている場合、libfbxsdk-mt.libはマルチスレッドの場合です。プロジェクトのC++ランタイムライブラリの使用状況は[構成プロパティ]→[C/C++]→[コード生成]にある[ランタイムライブラリ]で確認できます。デフォルトは「マルチスレッドDLL(/MD)」のはずです。libfbxsdk.libは動的リンク用なので使用時にdllが必要になります(本編では使いません)。
この状態で普通はOKなのですが、実際にコンパイルしてみると以下のコンパイルエラーが出ます:
1>c:\program files\autodesk\fbx\fbx sdk\2019.0\include\fbxsdk\core\fbxproperty.h(1161): error C2903: 'GetPropertyValue': シンボルはクラス テンプレート でも関数 テンプレート でもありません
1>c:\program files\autodesk\fbx\fbx sdk\2019.0\include\fbxsdk\core\fbxproperty.h(1173): note: コンパイル対象の クラス テンプレート インスタンス化 'fbxsdk::FbxPropertyT<T>' のリファレンスを確認してください
これかなり「?」だったのですが、どうやらプロジェクトのプロパティにある[構成プロパティ]→[C/C++]→[言語]→[準拠モード]を「いいえ」にすると直るようです。試せていないのですが、多分このエラーはVS2015を使用している場合は出ないと思います。VS2017で「言語の準拠」が有効になったのですが、VS2015用のFBX
SDKはこの言語準拠が完全ではないため上のエラーが出たのだと思います。いいえにすると言語に準拠していないコードのエラーが出なくなるのでやや弊害はありますが、まぁ…仕方ないです。
取り敢えずこれでコンパイルは通ります!
B テスト
実際に設定がうまくいったかテストしてみます。以下のコードを実行してみましょう:
#include "stdafx.h"
#include <fbxsdk.h>
int main()
{
FbxManager *manager = FbxManager::Create();
manager->Destroy();
return 0;
}
FBX SDKを使うにはfbxsdk.hをインクルードします。FbxManagerはFBXを扱う大本の人で、Createメソッドで作ります。必要が無くなったらDestroyメソッドを呼ぶと解放されます。上のコードをコンパイルしてエラーが出なければFBX SDKを使う環境が整った事になります!