DirectXを利用した2D、3Dゲーム開発向けのライブラリです。
VC++用です。関数形式ではなくクラス形式で提供しているのでVBとかじゃ使えないかも・・・。
元々は自分のサイトにて公開していたものですが、一人で開発し続けるには余りに規模がデカく、
また自分の環境では起きないバグ等もあると思い、2007年02月09日 にSourceForge.jp上にオープンソース化しました。
しかし、いざそのライブラリを使用してゲームを作ってみたものの、そのソースコードは非常に複雑で、汚く難解なものでした。
これを解決するには、恐らく、単なる呼び出し型のライブラリでは駄目。
テンプレート・プログラミングか、それともMix-inか・・・でも、それらを用いた所で、本当に綺麗で、真に分かりやすいプログラムが書けるようになるのだろうか・・・?
・・・単なるライブラリでは限界があるかも知れない。
ゲームのプログラミングは非常に複雑です。
例えDirectX関連の部分が簡略化出来たとしても、今度は”ゲームプログラミングとしての複雑さ”にぶち当たります。
確かに、テンプレート・プログラミングやMix-in、またはそれ以外の手法を用いることにより、ある一定量の成果は出せるかも知れない。
しかし、私はこのライブラリを作る過程で、どんなに仕組みを、設計を極めたとしても、ある一定の所で壁にぶち当たるのではないか。と思いました。
C++は非常に柔軟な言語であるため、それが”C++と言う言語の壁”だとは思いません。
私が思うに”プログラミング言語としての壁”にぶち当たるのではないかと思いました。
例えば、テンプレート・プログラミングにて上手く設計出来た(ように見えた)としましょう。
しかしその実、「Hoge<Hoge2,<Hoge3,Hoge4>>」のように非常に複雑なテンプレートであったり、もしくは継承関係が非常に複雑であったとしたら・・・
それは本当に「シンプルになれた」と言えるのか?
恐らく、ここで「スクリプト言語」と言う道への選択を考える人も居るでしょう。
私も最初はそうでした。しかしある一定まで作った所で辞めました。
そこには、私がflex、bisonと言うコンパイラコンパイラを使うのが始めてであったため、非常にプログラムが複雑で難解になってしまった、と言うのもありますが、
しかし一番大きな理由は、結局、こうやってスクリプト言語を作っても、
それがNeptuneプロジェクトの始まりでした。
現在、Open-MGLを利用した上位アプリケーションとして「Neptune」と言うソフトを(別の SourceForge.jp プロジェクトとして)開発中です。
Neptuneは2D、3Dゲームの統合開発環境(IDE)──というよりも「オーサリング・ツール」です。
単なる言語ライブラリでは限界があると判断し、2008年初めに開発を開始しました。
なお、これに伴いOpen-MGLの開発がとまったわけではなく、むしろNeptune開発中に
「こんな機能があるといいな」と言うのをどんどんフィードバックし、こちらも依然として開発を続けています。
(むしろこのフィードバックにより、以前にも増して開発が活発化しているとも言えます。)