2009年3月某日現在に知ったのだが、Managed-DirectXはサポートが終了したそうなので、もはや以下の内容は何ら価値のないものになったと言える。DirectXはUnmanagedな環境でやるのが安全ぽい。。。なんだよそれ。無駄に勉強させやがって。ていうかPC上で3Dツールとか作るならやっぱりOpenGLしか選択肢はないのかも知れないな。
VS2005があり、DirectX9SDKがインストールされていたとして、C++/CLIでDirectXを使うに最短、最小限のコード、手順をここにまとめておく。基本的にはデバイスオブジェクトを作成して、描画部に描画コードを記述するだけだ。
- 「プロジェクト」の「参照」というところから、「新しい参照の追加」というのをやり、Microsoft.DirectX.Direct3D を追加。
- WindowsForm プロジェクトを作成し、Form1.h コード編集モードに入る。
- public: Device^ m_device;と、メンバ変数を宣言。
- クラス定義冒頭のusing namespace 宣言の最後尾に、
using namespace Microsoft::DirectX::Direct3D;を追記する。 - 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 );
- あとは、フォームデザイナ画面にて、Paintコールバックを作成し、
其の中で、以下の2行を記述。
this->m_device->Clear(ClearFlags::Target, Color::DarkCyan, 1.0f, 0);
this->m_device->Present();// バッファをスワップ
これで、フォームがDirect3Dの画面に早変わりし、指定したダークシアンの虚空が描かれるのであった。OpenGLしか使ってこなかった身としては、これで完璧だなどと考えてしまうかも知れない。しかし、DirectXにおいては、フォームのコンストラクタに初期化コードを記述したり、フォームのPaintコールバック に描画コードを記述するのみが手段ではない、それはむしろ、必ずしも正しいというわけでさえもなさそうだ。
答えは更なる研究の向こうにある。