忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

[Windows® API Code Pack for Microsoft® .NET Framework] C#でDirectX11をつかう その1 下準備

(対象読者は「XNAが使えるけどDirectXはちょっとめんどくさいなぁ」と感じている人を想定しています)

XNAではDirectX11世代の技術は使えない

簡単に3Dゲームを作れるXNAですが、
限界もあります。

XNAはDirectX9世代ですが、
現在DirectXの最新世代は11なのです。
つまりXNAでは最新技術を使えません

ではXNAがDirectX11以上に将来対応するかというと、
おそらくいつかはするのでしょうが、
Xbox360との兼ね合いですぐには難しいでしょう。

MicrosoftとしてはXNAで作ったゲームはXbox360
で動いて欲しいはずですが、
肝心のXbox360がDirectX9固定です。
XNAが11に対応してしまえば、XNAで作ったゲームが
Xbox360で動かせないケースが出てくるはずです。

ですから、XNAが11移行に対応するとすれば
それはXbox360の次の世代のゲーム機が発売された時だと思われます。
しかし残念なことにそれは、まだまだ先のことのようです。



Windows API Code Pack for Microsoft .NET Framework

つまりC#で最新技術に追いつくのはやや面倒なことになっているのですが、
一方で救いもあります。
 Windows® API Code Pack for Microsoft® .NET Frameworkというものがあるのです。

ここでは最新APIの数々がC#で使えるようにラッパーが書かれています。
DirectX11もその中に含まれています。

C#でDirectX11が使えるわけです

しかし見たところすべての機能がラップされているわけではありません。
たとえばMatrix4x4Fにファクトリメソッドは一つもありません
XNAの豊富なメソッド群と比べるとまだまだ貧相です。
今すぐ使うのはまだ難しいけれど、将来に期待といったところでしょうか。
ただ動作を確認するだけなら今でもできるはずです。

使ってみましょう。


Windows API Code Pack for Microsoft .NET Frameworkのインストール

インストールはここ

Windows API Code Pack v1.1 (Binaries, Source Docs)

というリンクをクリックします。
現在バージョンは1.1で、2010年9月のもののようです。

クリックすると

Windows API Code Pack Self Extractor.exe

というファイルがダウンロードされますので、実行します。
すると同じディレクトリに

Windows API Code Pack 1.1.zip

というファイルが展開されます。
この中に.netのアセンブリが含まれています。
Visual StudioのProjectフォルダかどこかに移動して展開しましょう。


出来たフォルダの中を見ると、

binaries > DirectX > x86

にDirectXのラッパーアセンブリがあります。

Visual C#のプロジェクトを作ってこれを参照追加してみましょう。


コードの雛形

いきなりDirectXを使ってみるというのは
その複雑さから言って無謀です!

順序良く行きましょう。
シンプルなものから少しずつ発展させていくのです。

まずはWindows Formsを使って
ウィンドウを表示します。

Program.cs

class Program
{
    static void Main()
    {
        using (Game game = new Game())
        {
            game.Run();
        }
    }
}

class Game : System.Windows.Forms.Form
{
    public void Run()
    {
        Show();

        while (Created)
        {
            System.Windows.Forms.Application.DoEvents();
        }
    }
}



このコードはウィンドウを一つ表示します。

directX11TutorialCreateWindow.jpg

Application.Run()ではなくwhileループを使っているのは
そのほうが後に書くことになるプログラムの構造に近いからです。

ちなみにどことなくクラス名メソッド名などが
XNAに似ているのはわざとです。

今後もこの調子で
続けていきます。




拍手[1回]

PR