はじめに11
最初に述べておきたい重要な考え方13
最低限度の3D知識15
行列による頂点の変換(回転、スケーリング、移動)17
行列によるジオメトリの回転17
行列を用いたジオメトリのスケーリング18
行列を用いたジオメトリの平行移動20
変換の合成21
変換行列を重ねる21
○掛ける順番で結果が変わる 移動して回転24
○個々の変換がかかる順番26
原点以外の中心点で回転する手順27
第1部 基礎30
1章 ウィンドウプログラム31
2章 Direct3D最初の一歩36
2-1節 Direct3Dの初期化36
デバイスとスワップチェーンの作成36
レンダーターゲットビューの作成40
ビューポートの設定42
Direct3Dオブジェクトの破棄43
Direct3D11の場合43
2-2節 画面のクリア44
第2部 ポリゴン47
3章 ポリゴン描画48
3-1節 トライアングル D3D1048
初期化49
レンダリング53
3-2節 Direct3D10と11のコード上の違い56
初期化57
アプリ、シェーダー間のやりとり57
コラム FX Composerでのコメントについて60
3-3節 トライアングル D3D1160
3-4節 クアッド62
D3D11での実装64
3-5節 マテリアル 色65
D3D11での実装66
3-6節 マテリアル テクスチャー色67
3-7節 ワールド、ビュー、プロジェクション変換する70
ワールド、ビュー、プロジェクション変換70
D3D11の実装73
3-8節 マテリアル 陰影74
D3D11の実装78
3-9節 マテリアル 光沢79
D3D11の実装82
第3部 スタティックメッシュ83
4章 外部ファイルの必要性85
4-1節 メッシュはポリゴンの集合85
4-2節 ソース上の限界87
5章 OBJからスタティックメッシュを作成する88
5-1節 OBJファイルについて88
5-2節 ジオメトリのみ、トライアングル(三角形)88
ポリゴンに必要なもの90
D3D11の実装95
D3D11では、どうしてTranspose?95
5-3節 ジオメトリのみ、クアッド(四角形)96
5-4節 ジオメトリのみ、ボックス(立方体)97
5-5節 シェーディング(陰影)を反映99
D3D11の実装102
5-6節 マテリアル(色、光沢)を反映102
頂点単位102
ピクセル単位106
D3D11の実装106
5-7節 テクスチャー(画像の色)を反映107
画像成分のみ107
マテリアル+テクスチャー109
D3D11の実装109
6章 FBXからスタティックメッシュを作成する110
6-1節 FBXファイルについて110
6-2節 パーサーは既にある ”FBX SDK”110
FBX SDKの入手111
VCプロジェクト設定111
コラム FBXプログラムは半角ディレクトリで120
6-3節 スタティックメッシュの作成120
D3D11の実装129
7章 COLLADAからスタティックメッシュを作成する130
7-1節 COLLADAファイルについて130
7-2節 パーサーは既にある COLLADA DOM130
COLLADA DOMの入手131
DOMをビルド132
VCプロジェクト設定134
7-3節 スタティックメッシュの作成142
頂点(座標)を取り出す144
頂点インデックスを取り出す145
頂点法線を取り出す147
UV(テクスチャー座標)を取り出す147
マテリアルを取り出す148
D3D11の実装150
コラム DOMを使うべきか?150
8章 Xからスタティックメッシュを作成する151
8-1節 Xファイルについて151
8-2節 スタティックメッシュの作成161
最初に1点だけ161
D3D11の実装170
コラム 右手座標系 左手座標系170
第4部 階層メッシュアニメーション171
9章 階層アニメーション 原理解説173
10章 FBXから階層メッシュアニメーション176
10-1節 階層の管理177
読み込み部分177
レンダリング部分178
10-2節 アニメーション179
キーフレーム179
補間181
アニメーションの進行182
D3D11の実装184
コラム なぜ float3x3でキャストするのか184
11章 Xから階層メッシュアニメーション185
11-1節 行列間の補間186
11-2節 その他コード解説188
D3D11の実装190
第5部 スキンメッシュアニメーション191
12章 スキニング原理解説 ”紙”スキニングで理解する193
13章 ソース上におけるボーン206
14章 プログラム構造図の読み方210
処理 operations210
流れ sequences210
反復 iterations211
選択 selections212
15章 FBXからスキンメッシュアニメーション213
15-1節 プログラム構造図(ジャクソン図)214
15-2節 コード解説221
D3D11の実装227
コラム FBXの生成と開放について228
16章 Xからスキンメッシュアニメーション229
16-1節 パーサーのコード解説230
第6部 UV数が頂点数より多い場合237
17章 UV数ベースでの頂点作成239
17-1節 なぜUV数が多くなるのか239
17-2節 対処方法240
17-3節 コード解説243
OBJでの変更点244
FBXでの変更点245
COLLADAでの変更点246
コラム いったいどのフォーマットが良い?248
第7部 バンプマッピング249
18章 ノーマルバンプマッピング原理解説251
19章 メッシュにノーマルバンプマッピング257
19-1節 コード解説262
①頂点レイアウトに接線を追加262
②接線計算の関数を追加し、頂点ごとに計算、頂点に接線を追加263
③ノーマルマップ画像をテクスチャーとして読み込む263
④シェーダー側のコードをバンプマップ用に書き換える265
20章 ノーマルマップ画像の作り方266
付録. 267
21章 COMの実践による理解268
21-1節 COMとは?268
21-2節 なぜCOMなのか?269
1つ目、使用言語の問題270
2つ目、差し替えの問題270
21-3節 COM用語の統一271
全般的な留意事項272
21-4節 実装とインターフェイスの分離274
21-4-1 差し替えできないDLL275
21-4-2 差し替え可能なDLL278
なぜ、差し替えが可能なのか?280
21-5節 COMサーバー、COMクライアントの作成281
21-5-1 COMサーバーの作成281
21-5-2 COMクライアントの作成291
21-5-3レジストリ登録293
21-5-4 複数のインターフェイスを持つCOMオブジェクト296
21-6節 補足298
DEFファイルについて298
マクロについて298
自分でプロジェクトを新規作成する場合の留意点299