#自己紹介
5年ほどプログラムを嗜んできた素人です。
DXライブラリでフライトシューティングや戦車ゲーム、FPSなどを作っています。
忘れないうちにC++×DXライブラリの知識を書き留めておきたいと思い今回から投稿していきます。
##おさらい
###DXライブラリとは
DXライブラリとは、
-DXライブラリ Windows版は、DirectXを使ったWindowsデスクトップアプリの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。(使用する際はC言語の知識だけで大丈夫です)
--DXライブラリ置き場より
と、DirectX(3D、inputその他)やWin32、Xaudioなどをラッピングし使いやすくしたゲームライブラリとなっています。広義のゲームエンジンと言えますね。
固定機能風によるDirectX9相当の描画やキー入力、ステレオ3Dサウンドを実現します。
###長所
-DirectXをかなり楽に利用できる
--少なくとも何も書いていない画面を描画する為だけに100行近く書く必要が無いのは長所と言えるでしょう、手軽にDirectXを扱うことができます。
--内部的にはDirectX11で動かすことが出来るため、DirectX11の描画ハンドルを他APIに渡して…と言ったことが簡単にできます。
-C言語の知識だけで良い
--ライブラリで帰ってくる戻り値や引数がC言語準拠な構造体やポインタだけである為、C++の知識がなくても扱うことができます。
###短所
-DirectXの長所が活かされない
--DirectX(3D)では、HLSLを用いたシェーダーの柔軟なカスタマイズが可能です。しかしながらDXライブラリでは内部でこそDirectX9、9.0c、11が動いているとは言え標準では固定機能しか扱うことができません。
---逆に言えば固定機能パイプラインが廃止されたDirectX11以降でも相応のものが使えるという長所でもありますが…
--一応頂点、ピクセル、ジオメトリシェーダーは5.0まで対応されてはいるのですが、公式サンプルでは大抵DirectX9時代の2.0〜3.0で記載されており、デフォルトでDirectX11モードが選択されることもあって過去のシェーダーが動かない場合が多いです。
---9、9.0cモードを使えば良いだけの話ですが、後述のEffekseerが(おそらく)DirectX11でしか正常に動作しないようなので表現の幅が狭められる事になりかねません。
-上記に伴い、シェーダーを用いない標準機能のみではPS2レベルのグラフィックまでしか作り込めません。
--PS2もプログラマブルシェーダーとはほぼ無縁なハードでした。
---ワンダと巨像、エースコンバット4などで用いられたテクニックを用いて作り込んでいくことになります。しかし前者の開発の方曰く「悪く言えばどっちつかずの中途半端」な作り込みになると言えます。
-C言語相当である為変換処理が生じる
--C言語相当の文法で書けるのは長所ですが、逆にC++として利用する場合めんどくさい事態になります。
--例えば引数が配列の場合、わざわざvectorを配列として渡す必要があります。
--そのためDXライブラリを更にラッピングする自分のラッパーが必要になります。
短所の方が長くなりましたが、こんなところでしょうか。
##必要なものは?
DXライブラリでのゲーム開発にあたって必要なものは、
-最新版のDXライブラリ
--常にバグフィクスや機能追加が行われております、うまく動かない…と思っていたら実はライブラリの古いバグということは稀によくある為、できる限り最新版を利用しましょう。
-Effekseer for DXLib
--DXライブラリでパーティクルシステムを作って…などするよりはDXライブラリにも対応しているエフェクトライブラリを使ってしまいましょう。とても美麗なエフェクトが使用できます。
##あったら良い知識
-C++の知識
--vectorなどのSTLを積極的に使っていきましょう。書き方がシンプルになりデバッグもしやすくなります。
--ライブラリ側の引数がC言語基準であることは留意しましょう。
-高速化の知識
--後々まとめたいですが、DXライブラリの処理で重い軽いが分かっていれば無駄な処理を省けます。
##まとめ
とりあえずあらいざらい書いてみました。次回からは実際に使用しているテクニックなどを投稿していきたいと思います。