なにはともあれHelloWorld
aokomoriuta edited this page Apr 17, 2012
·
5 revisions
トップページ: http://aokomoriuta.github.com/StudiesOfSlimDX/
とりあえず最初にやることと言ったらHelloWorldですね! というわけで作りましょう。
- レポジトリ
SlimDXというかDirectXはWPF向きに作られていないので、その間をどうにかしてつなぐ必要があります。
ここでは、
- バッファー用ウインドウに表示
- D3DImageに渡して、それをソースとするWPF用Imageを描画
普通に作るのはできるものとして割愛します!
System.Windows.Interop.D3DImageを、System.Windows.Controls.Imageのソースとして追加しておきます。 そうするとここに描画された画面が出てきます。
今回やることの本体はMainWindws.csにあります。アプリケーションウインドウですね。
大きく分けて、やることは以下の3つです。
順に説明します。ここでは、SlimDx.DirectX9.Deviceのコンストラクタを呼び出して作成します。
引数の詳細はDirectXの参考書とかManaged DirectXの説明[1]を読んでもらうとして、簡単に説明すると、
- コンテキスト(DirectXオブジェクト)。
- 物理アダプター番号。通常は0番でよい。
- デバイスの種類。今回はハードウェアで。
- 描画対象のハンドル。System.Winodews.Interop.HwndSourceを作ってそのハンドルを指定すべきなのかもしれないが、ゼロでも動く。
- デバイスの作成フラグ。通常はハードウェア頂点処理で良いが、ダメな場合もあるので注意。
- PresentParameters。細かい設定はここでするが、デフォルトコンストラクタでもなんとかなる場合が多い(気がする。
光源やらビューやらを設定します。これらの設定はDeviceを通して設定されます。
すべきことは
- 光源の設定
- 投影法の設定
- ビューの設定
- マテリアルの設定
実際の描画処理をします。
- 画面全体をクリアしたあと
- ティーポッドやら文字列やらを描画
ここがWPFで使う時に追加される部分です。
といってもやることは、
- D3DImageにデバイスから受け取ったバックバッファーを渡して
- バックバッファーの領域を指定する
転送前後で画像をロック・ロック解除するのを忘れず!
「とりあえず動く最小限の」を目指して書いたので、実際にはこのままだとあれこれ問題が起きる可能性があります。 例えばデバイスロストとか、フォーマットがどうこうという部分で問題があります。
が、ひとまずは動くようになったはずです。 あとはこれをもとにあれこれ自分が作りたいものを作ればよいでしょう。
- ^ Direct3D の初期化と基本処理 - ソーサリーフォースと本質的には変わりません。