2.Colladaファイルの読み込みと表示
今回はBlenderで作成した3DモデルをColladaファイルで書き出して自作のエンジンで読み込み、表示まで行います。とりあえずBlender2.8でサンプル用のモデルを作りました。モデルのココちゃんです。
Blenderのオリジナルファイルおよび書き出したColladaファイルは以下からダウンロードできます。
coco1.27 Blender2.8 file zip | 2020/03/14 | download |
coco1.27 Collada file zip | 2020/03/14 | download |
Blender上での表示は特に問題にしないでください。トーンシェーダなどの色付けは自作アプリのシェーダで行います。現在のエンジンではテクスチャの色のみ使用していて、ディフーズ等のマテリアルの色は無視しています。Colladaファイルの構造はかなり複雑なので現在は必要最小限の実装のみ行い、今後必要に応じて機能を追加していきます。今回のエンジンではモデルの頂点座標、ポリゴンのインデックス、法線、テクスチャのUV、テクスチャ画像のみ使用します。
BlenderからColladaファイルに書き出したら、daeファイルをテキストエディタで開いてテクスチャのパスを書き換えてください。"model/テクスチャファイル名"で行けると思います。modelフォルダ内にテクスチャ画像を置いてください。
以下のCha3DCoreLibが今回のメインの3Dエンジンのライブラリになります。今後この3Dエンジンに機能を追加していきます。
Cha3DCoreLib1.4 zip [windows] | 2020/03/14 | download |
Cha3DCoreLib1.4 Source zip [windows] | 2020/03/14 | download |
Cha3DCoreLib1.5 zip [windows] | 2020/03/22 | download |
Cha3DCoreLib1.5 Source zip [windows] | 2020/03/22 | download |
3Dエンジンを利用する際はDirectX11ランタイムが必要になるかと思います。またプロジェクトをビルドする際にはDirectX11 SDKが必要になると思いますのでマイクロソフトの公式サイトからダウンロードしてください。DirectX11 SDKをインストールしたらお使いの環境に応じてプロジェクトファイルのインクルード、ライブラリのパスを書き換えてください。
現在のエンジンのAPIは以下のようになります。今後機能の追加によりAPIが増えていくことになると思います。
Cha3DCoreLib API一覧 | ||
CChaDataObject() | - | 3Dデータ格納用オブジェクトを作成します。 |
bool LoadDAE( wchar_t *path ) | path: ロードするcolladaファイルのパスを指定します。 | Colladaファイルをロードします。 |
CChaResourceObject() | - | 3D表示用のリソースオブジェクトを作成します。 |
bool CreateResource( ID3D11Device m_pDevice, CChaDataObject *object ) | m_pDevice: DirectX11デバイスを指定します。デバイスの作成方法が分からない人はModelViewerのソースを参考にしてください。 object: LoadDAEでデータをロードしたCChaDataObjectを指定してください。 | CChaDataObjectから画面に表示するための3Dリソースオブジェクトを作成します。 |
bool Draw( ID3D11DeviceContext m_pDeviceContext ) | m_pDeviceContext: DirectX11デバイスコンテクストを指定します。デバイスの作成方法が分からない人はModelViewerのソースを参考にしてください。 | モデルを描画します。 |
ライブラリの使い方の流れとしては、
CChaDataObject *data_object = new CChaDataObject();
↓
data_object->LoadDAE(L"モデルのパス");
↓
CChaResourceObject *res_object = new CResourceObject();
↓
res_object->CreateResource( m_pDevice, data_object );
↓
res_object->Draw( m_pDeviceContext);
のようになります。
CChaDataObject *data_object = new CChaDataObject();
↓
data_object->LoadDAE(L"モデルのパス");
↓
CChaResourceObject *res_object = new CResourceObject();
↓
res_object->CreateResource( m_pDevice, data_object );
↓
res_object->Draw( m_pDeviceContext);
のようになります。
3Dエンジンのライブラリはモデルに関する処理のみ受け持つのでデバイス作成やシェーダなどの処理は全て自前で実装する必要があります。最低限の描画に関するコードは下記のModelViewerのソースを参考にしてください。
シェーダに関してはModelViewerのソースに含まれるshader.hlslをfxcでコンパイルする必要があります。fxcはDirectX SDKに含まれています。ModelViewerのソースに含まれているcompaile_shader.batをダブルクリックすればシェーダのコンパイルをバッチで処理しますが、お使いの環境によってはファイルをcompile_shader.bat.txtに書き換えてテキストエディタでバッチファイルを開いてfxcのパスを書き換えてください。
以下にModelViwerのexeファイルとソースを載せておきます。
MovelViewer1.3(exe) zip [windows] | 2020/03/14 | download |
ModelViewer1.3 Source zip [windows] | 2020/03/14 | download |
MovelViewer1.4(exe) zip [windows] | 2020/03/22 | download |
ModelViewer1.4 Source zip [windows] | 2020/03/22 | download |
特に問題なければexeファイルをダブルクリックで実行してモデルが表示されると思います。
© 2018 Chafumi Touji