Skip to content

なにはともあれHelloWorld

aokomoriuta edited this page Apr 17, 2012 · 5 revisions

トップページ: http://aokomoriuta.github.com/StudiesOfSlimDX/


とりあえず最初にやることと言ったらHelloWorldですね! というわけで作りましょう。
レポジトリ
https://github.com/aokomoriuta/StudiesOfSlimDX/tree/master/HelloWorld

Table of Contents

仕組み

SlimDXというかDirectXはWPF向きに作られていないので、その間をどうにかしてつなぐ必要があります。

ここでは、

  1. バッファー用ウインドウに表示
  2. D3DImageに渡して、それをソースとするWPF用Imageを描画
という形式にしました。 いちいち画像に変換してる辺り無駄な気がしなくも無いですが、長所としては画像扱いなので非常に扱いやすい(ファイルに保存なんかも容易)ってところでしょうか。

方法

WPFアプリケーションを作る

普通に作るのはできるものとして割愛します!

D3DImageの追加

MainWindow.xaml13-17行目です。

System.Windows.Interop.D3DImageを、System.Windows.Controls.Imageのソースとして追加しておきます。 そうするとここに描画された画面が出てきます。

ロジック

今回やることの本体はMainWindws.csにあります。アプリケーションウインドウですね。

大きく分けて、やることは以下の3つです。

  1. デバイスを作成する(34-41行目
  2. 表示環境を設定する(43-69行目
  3. 描画する(72-89行目
  4. 画像に転送する(92-100行目
順に説明します。

デバイスを作成する

ここでは、SlimDx.DirectX9.Deviceのコンストラクタを呼び出して作成します。

引数の詳細はDirectXの参考書とかManaged DirectXの説明[1]を読んでもらうとして、簡単に説明すると、

  1. コンテキスト(DirectXオブジェクト)。
  2. 物理アダプター番号。通常は0番でよい。
  3. デバイスの種類。今回はハードウェアで。
  4. 描画対象のハンドル。System.Winodews.Interop.HwndSourceを作ってそのハンドルを指定すべきなのかもしれないが、ゼロでも動く。
  5. デバイスの作成フラグ。通常はハードウェア頂点処理で良いが、ダメな場合もあるので注意。
  6. PresentParameters。細かい設定はここでするが、デフォルトコンストラクタでもなんとかなる場合が多い(気がする。

表示環境を設定する

光源やらビューやらを設定します。これらの設定はDeviceを通して設定されます。

すべきことは

  1. 光源の設定
  2. 投影法の設定
  3. ビューの設定
  4. マテリアルの設定
です。ここらは普通のSlimDXやらManaged DirectXと変わりません。

描画する

実際の描画処理をします。

  1. 画面全体をクリアしたあと
  2. ティーポッドやら文字列やらを描画
するだけです。ここも普通のSlimDXやらManaged DirectXと変わりません。 描画前後でBeginSceneとEndSceneの呼び出し忘れに注意ですね。

画像に転送する

ここがWPFで使う時に追加される部分です。

といってもやることは、

  1. D3DImageにデバイスから受け取ったバックバッファーを渡して
  2. バックバッファーの領域を指定する
という作業をするだけです。

転送前後で画像をロック・ロック解除するのを忘れず!

おわりに(注意)

「とりあえず動く最小限の」を目指して書いたので、実際にはこのままだとあれこれ問題が起きる可能性があります。 例えばデバイスロストとか、フォーマットがどうこうという部分で問題があります。

が、ひとまずは動くようになったはずです。 あとはこれをもとにあれこれ自分が作りたいものを作ればよいでしょう。

参考文献

  1. ^ Direct3D の初期化と基本処理 - ソーサリーフォースと本質的には変わりません。