読者です 読者をやめる 読者になる 読者になる

お茶漬けびより

学んだことを整理する場所です。主に、C++, Unreal Engine 4 (UE4) を扱います。

DirectX 11 を始めました # 0

自分の調べた内容を整理するために、書き起こしてみました。
なるべく DirectX 初心者でも分かるように書きたいと思います。

今回は、DirectX や別のライブラリを紹介していきます。

DirectX って?

Microsoft が開発したゲームやマルチメディア処理用のグラフィックス API です。
PC でゲームをする人は、初めてゲームをするときに入れたことがあるかもしれません。開発者は、これを開発のために使います。
この DirectX には、WindowsWindows 7Windows 8.1, Windows 10 のように大きなバージョンごとに名前が少し変わります。
有名なところだと、DirectX 9.0, DirectX 11.0, DirectX 12 です。名前が変わるきっかけは、大きな機能が追加、変更されたりすると変わります。

Windows のバージョンによって、使える DirectX が決まります。 だいたい以下のようになっています。

Windows の対応している DirectX のバージョンは、Wikipedia や 公式サイトが詳しいです。

https://support.microsoft.com/ja-jp/help/179113/how-to-install-the-latest-version-of-directx Microsoft DirectX - Wikipedia

いくつか種類はありますが、要は DirectX を使えば、ゲームを作れるよということです。
ここでは、DirectX 11.0 を使いますがこれは、DirectX 11 がそこそこ新しくて、そこそこ学びやすいからです。 DirectX 12 は、新しいのですが難しくいきなり触るのは危険だからです。

本当に DirectX でいいの?

先に DirectX を使えばゲームを作れると書きましたが、これは現実的ではありません。
というのも、DirectX というのは、開発者がコンピュータグラフィックス(CG)を扱うための手段としては低レベルな API だからです。
ゲームを作るというのが目的であれば、DirectX を直接触る必要なく作ることが出来る API(ライブラリ)があります。

例えば、DXライブラリというゲームライブラリがありますが、これは DirectX の機能をゲームのために簡単に扱えるようにしたライブラリです。
他にも、openFrameworks や、SFMLCinderSiv3D などがあります。ライブラリとは少し異なりますが、Cocos2d-x というフレームワークもあります。

自分が使いたい言語(C や C++Java など)、環境(PC やスマフォ)、目的は何なのか。だいたいこの 3 つを決めた上で、先に挙げたようなライブラリを選択することをお勧めします(特に目的が大事です)。
各ライブラリの URL は面倒なので省きますが、検索すると別のライブラリの名前も出ることがあるので、一度自分の目的を明確にしてから調べてみるといいでしょう。

実は、先に挙げたライブラリ、自分はどれも使ったことがありません・・・・・・。ゲームを作ろうと DirectX 9.0 を少し触ったことがあり、簡単なゲームを一つ作りましたが、かなり時間がかかりました(だらだらやっていたせいもありますが)。

調べた感じだと、
Cocos2d-xDXライブラリ や openFrameWorksDirectX や OpenGL
の順番で低レベルな API になっていくと思います。

じゃあ DirectX を使うメリットは何なのかといいますと、CG が描画される仕組みをより深く知ることができ、より自由で高速なプログラムを作ることが出来ます。ですが、自由で高速なプログラムなんて初心者には無理です。それなら初心者は、ライブラリで十分です。

ライブラリで十分なのですが、CG が描画される仕組みをより深く知ることができるのは、かなりのメリットだと思います。なので、DirectX を触ることは無駄ではないです。自分のしたいことと自由に使える時間と相談して、選んでいくといいと思います。

また、少しずつ低レベルな API に変えていくという方法もあると思います。
例えば、Cocos2d-x → DXライブラリ → DirectX というように使っている API に慣れたらさらに低レベルな API に切り替えて新しい(または同じ)ゲームを作っていくという方法です。
これは、ゲームで例えると自分があまり苦戦せずに倒せる敵でレベル上げをしていく感じです。逆にいきなり DirectX を触るのは、強敵や高経験値を持っているけど運要素が強い敵でレベル上げをしていくようなものです。

さいごに

長くなりましたが、なんとなく DirectX を触ってみようと考えていた方の参考になればいいなと思って書きました。

最後に、目的がゲームを作ることで、プログラミングなんてしたくないって方には、ゲームエンジンをおすすめします。
有名どころですと、UnityUnrealEngine があります。他にも XenkoDefold , Playground など様々なゲームエンジンが無料で扱えます。 どれも同じなわけではなくそれぞれに特徴があるので、これもまた自分の作りたいものに合わせて選ぶといいでしょう。あとは、使い方の情報の多さも大事です。

今回はこの辺でおしまいにします。