C++/CLI 、わずか8行で Man-DirectXへ移行せよ!


2009年3月某日現在に知ったのだが、Managed-DirectXはサポートが終了したそうなので、もはや以下の内容は何ら価値のないものになったと言える。DirectXはUnmanagedな環境でやるのが安全ぽい。。。なんだよそれ。無駄に勉強させやがって。ていうかPC上で3Dツールとか作るならやっぱりOpenGLしか選択肢はないのかも知れないな。

VS2005があり、DirectX9SDKがインストールされていたとして、C++/CLIDirectXを使うに最短、最小限のコード、手順をここにまとめておく。基本的にはデバイスオブジェクトを作成して、描画部に描画コードを記述するだけだ。

  1. 「プロジェクト」の「参照」というところから、「新しい参照の追加」というのをやり、Microsoft.DirectX.Direct3D を追加。
  2. WindowsForm プロジェクトを作成し、Form1.h コード編集モードに入る。
  3. public: Device^ m_device;と、メンバ変数を宣言。
  4. クラス定義冒頭のusing namespace 宣言の最後尾に、
    using namespace Microsoft::DirectX::Direct3D;を追記する。
  5. Form1.h のコンストラクタ、InitializeComponetの後ろにて、以下のコードを追記。

PresentParameters^ pp = gcnew PresentParameters();
pp->Windowed = true;
pp->SwapEffect = SwapEffect::Discard;// ダブルバッファを有効に
this->m_device = gcnew Device( 0, DeviceType::Hardware,this,
  CreateFlags::HardwareVertexProcessing, pp );

  1. あとは、フォームデザイナ画面にて、Paintコールバックを作成し、
    其の中で、以下の2行を記述。

this->m_device->Clear(ClearFlags::Target, Color::DarkCyan, 1.0f, 0);
this->m_device->Present();
// バッファをスワップ

これで、フォームがDirect3Dの画面に早変わりし、指定したダークシアンの虚空が描かれるのであった。OpenGLしか使ってこなかった身としては、これで完璧だなどと考えてしまうかも知れない。しかし、DirectXにおいては、フォームのコンストラクタに初期化コードを記述したり、フォームのPaintコールバック に描画コードを記述するのみが手段ではない、それはむしろ、必ずしも正しいというわけでさえもなさそうだ。
答えは更なる研究の向こうにある。