Direct3D 10のプログラミング入門書「DirectX10 3Dプログラミング」(ISBN978-4-7775-1298-0)が7月19日に発売されます。
内容的には、C++とWin32 APIを使ったアプリの作成経験がある人を対象に、Direct3D 10を使ったプログラムの作成方法の基礎を解説しています。使用しているSDKは、「Microsoft DirectX SDK (April 2007)」です。書名が紛らわしいかもしれませんが、あくまでも「Direct3D 10.0」の解説書です。既刊「DirectX9 DirectX Graphics」の後継のような位置づけになります。ちなみに、私が執筆しています。
リンク先の書籍紹介ページには、なぜか10章までの目次しか載っていませんが、実際には、以下の24章から構成されています。(8月9日追記。その後、全章の目次が掲載されるようになったようです)。
1章 「Direct3D 10」の基礎知識
特徴/構成/リソース/APIのレイヤー構成/Direct3Dのヘルパー・ライブラリ/実行環境
2章 基本的なプログラム
プロジェクトの作成/DirectXのエラー表示機能/アプリケーションの基本構造/デバイスとスワップ・チェインの作成/バック・バッファの設定/画面の描画/デバイスの消失/終了処理/サンプル・プログラム
3章 DXGI
DXGIについて/グラフィックス環境の調査/ウインドウ・サイズ変更時の処理/ウインドウ・サイズの変更/無駄な画面描画の抑制/画面モードの切り替え/トーンカーブによる階調補正
4章 テクスチャの作成
テクスチャ/画像ファイルからシェーダ・リソース・ビューを作る/画像ファイルからテクスチャ・リソースを作る/描画ターゲットになるテクスチャ・リソースを作る/CPUから書き込むテクスチャ・リソースを作る/テクスチャを画像ファイルに保存する
5章 スプライトとフォントの描画
スプライト描画機能/フォント描画機能/深度/ステンシル・バッファの使用
6章 3Dグラフィックスの数学
ベクトルの変換操作 ~行列と同次座標~/左手座標系と右手座標系/三角形ポリゴンと向き/3Dグラフィックスの座標系と座標変換/照明(光源と反射)/16ビット浮動小数点数/ベクトルの構造体/クオータ二オンの構造体/行列の構造体/平面の構造体/色の構造体/マクロ
7章 3Dグラフィックスの基本的な描画手順
概要/ステート・オブジェクト/描画パイプラインで行なう処理
8章 描画データの用意
プリミティブの種類/頂点バッファとインデックス・バッファの用意
9章 シェーダ・ステージ
概要/シェーダで実行するコード/HLSLコードのコンパイル/シェーダ・オブジェクト/定数バッファ
10章 入力アセンブラ
概要/「頂点バッファ」と「入力スロット」/入力レイアウト・オブジェクト/プリミティブの種類
11章 ラスタライザ
概要/ラスタライザ・ステート・オブジェクト/ビューポート/シザー矩形
12章 出力マージャー
概要/描画ターゲット/ブレンド・ステート/深度/ステンシル・ステート
13章 基本的な3D描画
概要/定数バッファへの書き込み/描画パイプラインを構成/描画/サンプル・プログラム
14章 エフェクト
概要/fxファイル/エフェクトの作成/テクニックの取得/パスの取得/入力レイアウトの作成/グローバル変数の設定/エフェクトを使った描画/サンプル・プログラム
15章 HLSLの文法
HLSLの基本的な文法/HLSLの組み込み関数
16章 シェーダ関数
概要/頂点シェーダ関数/ジオメトリ・シェーダ関数/ピクセル・シェーダ関数/システム生成値/サンプル・プログラム
17章 テクスチャ描画
テクスチャの定義/シェーダ・リソース・ビューの設定/サンプラを使わないテクスチャ読み込み/サンプラを使ったテクスチャ読み込み/サンプル・プログラム
18章 3Dデータの読み込み
概要/Wavefront OBJファイル形式/Wavefront OBJファイル読み込み関数/境界球と境界ボックス/描画用データの作成/サンプル・プログラム
19章 複数インスタンスの同時描画
概要/インスタンス描画メソッド/各インスタンスの描画設定/サンプル・プログラム
20章 キューブ・テクスチャ
概要/キューブ・テクスチャへの描画/キューブ・テクスチャへのアクセス/サンプル・プログラム
21章 ストリーム出力
概要/バッファ・リソースの作成/ジオメトリ・シェーダの作成/ストリーム出力を使った描画パイプラインの実行/サンプル・プログラム
22章 影の描画
影について/シャドウ・ボリュームを使った影/シャドウ・マッピングによる影
23章 PIX for Windows
PIXの基本的な使い方/レンダリングの確認/描画するメッシュの確認/シェーダの動作確認
24章 NVIDIA GeForce 8シリーズ
GeForce 8シリーズのスペック/インタビュー
今回の本では、DXUTを使いませんでした。Direct3D 9のDXUTは、Direct3D 9の面倒な部分をシンプルな構造でうまく包み込んでくれていたと思いますが、Direct3D 10のDXUTはDirect3D 9と共用になってしまい、複雑になってしまいました。Direct3D 10の実行環境がVistaに限定されることもあり、Direct3D 9とDirect3D 10の両対応アプリケーションを開発する必要がある場合には便利なのでしょうが、Direct3D 10自体がDirect3D 9よりも使いやすくなったこともあり、Direct3D 10だけを使う場合にはDXUTのメリットがあまり感じられなかったので、ページの都合もあり、DXUTの解説は省略しました。
今回は、本書の最後で、エヌビディア コーポレーション デベロッパーテクノロジ エンジニアリングのブライアン デューダーシュさんに、GeForce 8シリーズについて、Direct3D 10初心者が思い浮かべそうな素朴な疑問をいくつかお聞きしました。
私の執筆作業が遅れたこともあり、インタービューはメールで質問を送って回答を返信してもらう形式で行なっており、回答文もNVIDIAから頂いた文章をほぼそのまま掲載しています。私の質問が悪いせいもあって、話がすれ違っている部分もありますが、ご容赦ください。
個人的には、質問5の回答の「より多くのプリマティブを実行すればするほど、パフォーマンスの低下が早くなるため、われわれはGSを実装したプリマティブを多数用いた制作はディベロッパーの方々へは推奨しません。」という部分が参考になりました。
本書がDirect3D 10のプログラミングを始めようと思っている方の参考になれば幸いです。