目次

photo 5

はじめに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