Vista も出て、DirectX 10 をそろそろ勉強しなきゃいけない今日この頃、 皆様、いかがお過ごしでしょうか。
DirectX 10 の勉強といっても、最近はサンプルが充実してるので、
それやるだけで通り一遍はマスターできちゃうんですよねぇ。
いや、ほんと、たんなる入門書は時代遅れだとおもいますよ(書こうと思ってるけど)…wiki か何かで皆でよってたかって作ったほうが今時じゃね?
と、いうことで、本を書くのは時間がかかるので(遅く出た本は価値が下がるので悩みどころなのですが)、前哨戦として入門編をここで展開してみます。
VisualStudio をインストールしてください。(無料な Express Edition のダウンロードは、こちらから)
あと、Microsoft Windows SDK (Platform SDK) も必要だったと思いますので、インストールしてください。(XP用は、これ(Windows Server 2003 R2 Platform SDK Full Download) とか、Vista用は、これ(Microsoft Windows Software Development Kit for Windows Vista and .NET Framework 3.0 Runtime Components )とか)
いよいよ DirectX ですが、microsoft のページから最新版のSDKをダウンロードしてインストールしてください
(現在は、最新版は日本からダウンロードできないようで、米国のXNA Developer Centerからたどることができます)。
一番、早い方法は、ぐだぐだ書くよりも、どうすれば効率よく勉強できるかを示すことだと思うので、それを書いちゃいましょう。
「サンプルを読め!」以上
本当に、それで終わりなのですが、あまりに手抜きなのでもう少しフォローしましょうか。最近の DirectX では、サンプルが非常に充実しているので、それだけ読めば本当にDirectX が使えるようになります(厳密には、あとはヘルプで知りたいことを検索するだけ問題は解決するということです)。と、いってもこれは DirectX の関数の呼び方なんかがわかるだけで、「どうすりゃゲームが作れるんだよ」とか、「この技術はどうやって実装するんだよ」という問題は別問題なので、それはそれで勉強してください(最近のゲームの作り方とかやりたいですけど、守秘義務の首ラインが読みにくいんで難しいんですよねぇ…)。
閑話休題、説明は英語で書いてありますが、どうせプログラムの関数は英語だし、順を追ってけいば、そんなに不自由せずに理解できると思います。
あとは、サンプルの数も多いので、どういう順番で読めば良いかということと、
どういう内容なのか理解しとくといいのかな?
大まかには、次の順序で進めていけばよいと思います。
そういえば、サンプルの位置とか紹介していませんでしたが、DirectX 10 のサンプルは、次の場所にあります。
C:\Program Files\Microsoft DirectX SDK (February 2007)\Samples\C++\Direct3D10
「Samples」の前の位置までは、DirectX SDK をインストールした場所なので、人によって違うかと思いますが適宜応答してください。
以降で、それぞれ見ていきましょう。
「Tutorials」にあるのが、順番に勉強していくことで一通りの使い方が身につけられるチュートリアルです。15個と数は多いですが、内容は少しづつ増えるだけなので、手間を惜しまず眺めていきましょう。
内容は、次のようになっています。
この内容は、2007年2月のSDKの内容なので、今度、変化していくと思いますが、
違っていても、そんなもんだと考えてください。
□Tutorial00:窓がでてイベント処理する一般的なウィンドウズアプリケーションの設定
簡単な Win32 アプリケーションの作成です。DirectX とは関係ありません。
□Tutorial01:Direct3D 10 デバイスを生成するデモのアプリケーション
Direct3D を使って画面を青っぽく塗りつぶします。
DirectX のうち、ポリゴン(や、ラインやポイント)を使って画面を表示する部分を Direct3D と言います。
Direct3D 10 デバイスとは、Direct3D を使うときの仮想ビデオカードみないなイメージでしょうか。
□Tutorial02:Direct3D 10 を使って、3角形を表示する
いわゆるポリゴン描画です。こんなとこからシェーダを使うのが今風です。
□Tutorial03:Direct3D 10 を使って、3角形を表示する
なんか「Shaders and Effect System」とか見えますけど、Tutorial02 と同じですね。
最初はシェーダを使わずにポリゴンを表示してたのが必須になって、構成が崩れたんですかねぇ
□Tutorial04:立方体を Direct3D 10 を使って表示
Tutorial02 では、3角形をぺたっと貼り付けていたのですが、今度は箱を立体的に表示します。いわゆる透視変換の導入です。
□Tutorial05:行列変換を使ったアニメーションのデモ
今度は2つの箱を表示します。位置を変えるために姿勢制御の行列を切り替える必要があるのですが、その(シェーダに受け渡すパラメータの)切り替え方の紹介です。
DirectX 9 の時は、変数を変えたことを明示的に指定してやらなきゃいけなかったんですが、それがなくなったよといいたいのかも知れないのですが、それを読み取るにはマニアック過ぎる気もするなぁ
□Tutorial06:頂点シェーダを使った簡単な照明計算のデモ
2つの平行光源からの拡散光の計算です。
個人的には、こういう簡単だけど一般性がないサンプルって使い回しが効かないから好きじゃないんですよねぇ
□Tutorial07:テクスチャを張るデモ
「seafloor.dds」を読み込んで、それを貼り付けます。
□Tutorial08:DXUT 入門
DirectX では、OpenGL のGLUTをパクったリスペクトした、簡易フレームワークがあります。
コールバック関数を登録し、呼ばれたときの処理を書くことによって、低レベルで単純な誰が書いてもそんなに変わらないのに書くのが面倒な部分を省いてくれます。
プロじゃなけりゃ、そのまま使っても良いんじゃない?というレベルに仕上がっています。いつ仕様が大きく変わるかわからないのが怖いぐらいです。
□Tutorial09:DXUT を使ったメッシュの読み込み
いわゆる3Dモデルの表示です。
いやぁ~、入門サイトで何が鬼門かというとこのメッシュ表示ですよ。
データを作るのは面倒くさいわ、細かく追っていくのは分量が多くなるわ、最悪です。
それに、普通は自分で扱いに便利なフォーマット考るっちゅ~の(公開できないけど)。
と、言うことで、ただモデル出したいだけなら、このチュートリアルに従ってモデルを表示しましょう。
□Tutorial10:DXUT の応用
DXUT で用意されているカメラやメニューの使い方を学習します。
このころから DXUT は、GLUT の範囲を飛び越えて「とにかく必要なやつ用意してやろうじゃないか」という気概が伺えます。
個人的には、DXUT にあまりどっぷりつかると他の環境に移れないので、
「絶対に他の環境で開発しない」という保障がない限りは、
ほどほどに使うのが良いんじゃないかなぁと思います。
□Tutorial11:頂点シェーダの応用
「何で、シェーダを書かせるのかというと、それを使うと変わったことが出来るからだよ」という見本です。横方向にうねうねします。エフェクトファイル(.fxの拡張子のファイル)が Tutorial10 とは違うので眺めてみてください。
素人さんはうれしいのかも知れませんが、実際はそのまま使うことはないよね…
□Tutorial12:ピクセルシェーダの応用
いわゆる環境マッピングです。キューブマップの使い方の導入にもなっています。
□Tutorial13:ジオメトリシェーダの入門
Direct3D 10 で導入されたジオメトリシェーダの使い方の入門です。
ポリゴンの各面を法線方向にずらして飛び散るような演出を実現します。
これもそのまま使うことはないですね。
□Tutorial14:状態管理
Direct3D では、レンダリングのためのパラメータ(表面だけor両面or裏面だけ等)がオブジェクト化されて、一斉に設定するようになっています。
(OpenGLでは、それぞれの値が配列のように保持されるようなステートマシーンになっててちょい古臭い気がします)。
まぁ、各種設定の方法と思いなさい。
あとは、Direct3D10Workshop と、サンプルがあるのですが、 とりあえず疲れたので次に。