メッシュ・スキンメッシュ(Xファイル)の表示

プロジェクトダウンロード...GitHub版

DirectX11 を使って、Xファイルを表示します。
ネットを探すといろいろなサンプルが出てくるのですが、
スキンメッシュまで対応したものは見当たりませんでした。
(あるかも知れません)
ならばとやってみたのですが、労多くして価値に乏しく、
見当たらないのもうなづけます。

現在、テキスト形式/バイナリ形式/バイナリ圧縮形式に対応しています。

XFile の圧縮フォーマットは現在入手困難なため独自調査です。詳しくはこちら

なお、テキスト形式を圧縮するフォーマットも仕様上存在し、
実装はしたつもりですが、未チェックです。

読み込みコードはフルスクラッチです。

まだまだ効率的なコードとは言えないです。

 

【ファイル概要】

カテゴリファイル名内容
データ構造XFileParser.cppclass CXFileParser を実装
XFile を読み込み、MeshFrame ヒエラルキーとAnimationSet データにまとめます。
XFileParser.h
binary.hバイナリトークンの定義
rfc1951.cppMSZip圧縮の伸長モジュール(伸長のみ)。伸長方法メモ
rfc1951.h
Mesh.cppデータ構造、MeshFrame/MeshContainer/Mesh/Material/MaterialAttributeRange
の定義と実装。
Mesh.h
Animation.cppデータ構造、AnimationSet/Animationの定義と実装。
Animation.h
描画・アニメSimpleMesh.cppXファイルからメッシュを読み取り、アニメーション無しでレンダリングするクラス(CSimpleMesh)を実装
SimpleMesh.h
SkinnedMesh.cppXファイルからスキンメッシュを読み取り、アニメーション付きでレンダリングするクラス(CSkinnedMesh)を実装
SkinnedMesh.h
AnimatedMesh.cppXファイルからメッシュを読み取り、アニメーション付きでレンダリングするクラス(CAnimatedMesh)を実装
AnimatedMesh.h
BoneRenderer.cppフレームヒエラルキーをボーンとして描画するクラス(CBoneRenderer)を実装
BoneRenderer.h
Animator.cppAnimationSet データを再生し、ボーンアニメーションを実行するクラス(CAnimator)を実装。CSkinnedMesh/CAnimatedMesh が使用する。
Animator.h
MeshFrameTracker.cppヒエラルキー内のMeshFrameを検索し、その Transform 行列を追跡するクラス(CMeshFrameTracker)の実装。
MeshFrameTracker.h
IMesh.cpp上の6個のクラスをまとめて管理するためのインタフェースおよびファクトリーメソッドを実装した仮想クラスを定義(ISimpleMesh/ISkinnedMesh/IAnimatedMesh/IBoneRenderer/IAnimator/IMeshFrameTracker)。
IMesh.h
MTAnimator.cppマルチキャラクタを実現するためのクラス(CMTAnimator)の実装。
MTAnimator.h
テクスチャ機能FilenameDecoder.cppfull-path およびrelative-path のパス文字列を分解し、ファイル・ディレクトを推定する機能を提供するクラス(CFilenameDecoder)を実装
FilenameDecoder.h
D3D11TextureDB.cppテクスチャを格納するためのデータベースクラス(CTextureDB)を実装。
複数のマテリアルが同一のテクスチャを読み込む場合、データを共有することで省メモリ可を図る。
D3D11TextureDB.h
画像読込
ヘルパー
TextureLoader.cppテクスチャを読み込む機能の実装クラス(CTextureLoader)。
TextureLoader.h
ddsfunctions.cppCTextureLoader にddsファイルを読み込む機能を追加するモジュール。
ddsfunctions.h
tgafunctions.cppCTextureLoader にtargaファイルを読み込む機能を追加するモジュール。
tgafunctions.h
その他
メッシュ機能とは
直接関係なし
D3D11Font.cppテクスチャを使用したAnkフォント(CD3D11Font)の実装
D3D11Font.h
D3D11Sprite.cpp2Dスプライトを実現するクラス(CD3D11Sprite/ID3D11Sprite)の実装。
D3D11Sorite.h
D3D11PointSprite.cpp3Dポイントスプライトを実現するクラス(CD3D11PointSprite/ID3D11PointSprite)の実装。
D3D11PointSorite.h
D3DContext.cppDirectX の初期化・終了を行うクラスCD3D11Context(ID3D11Context)を実装する。
D3DContext.h
DeviceDependentObject.h描画ヘルパーが使用するデバイス依存オブジェクト用のインタフェース IDeviceDependentObject の宣言
HighResTimer.cpp高精度タイマー(Performance Counter)を使って計時するためのクラス(CHighResTimer)の実装。
HighResTimer.h
D3D11_TryMesh01.cppWin32アプリケーションの実装。
D3D11_TryMesh01.h

 

【更新履歴】

日時更新内容
2017.Jan.01公開
2017.Jan.05Binary format に対応
2017.Jan.05Binary compressed format に対応
2017.Jan.08ファイルリストを追加、64bit ビルドに対応
2017.Jan.12Compressed format の解凍コードを自作した(Win7対応)
2017.Jan.18解凍コードを効率化
2017.Jan.30SimpleMesh.cpp を修正、メッシュ階層をちゃんとたどるようにした。
2017.Feb.1行列やベクトルの配列へのメモリ割り当てのアライメント方法を修正。最適化しても動作するようになった。
2017.Feb.16Compile 済みシェーダを使用するようにした。Sprite とも共存した。
2017.Feb.16COM オブジェクトのRelease漏れを見直し修正。
2017.Mar.26CAnimatedMesh および IAnimatedMesh を追加。

 

 

戻る