こんにちは、CG^3の抹茶(@_xcipher)です.

現在、minecraftっぽい3Dゲームを作ろうとしていて、そのゲームエンジン部分を作成中です.

4月までDirectX11ベースでゲームのエンジン部分を作ってたのですが、ちょっと行き詰まったのでOpenGLに乗り換えてみました.

* 環境とか
  • Visual C++ 2012 (Nov 2012 CTP)
  • OpenGL 4.0
  • GLSL 4.0

* 使用しているライブラリとか
  • glfw3 (GLUT的ポジション)
  • glew (GLSLまわり)
  • GLM (数学関係)
  • FTGL (日本語フォント描画)(予定)
  • LodePNG (PNG画像読み込み)
  • Google V8 JavaScript Engine (スクリプティング)

Windowsでも特に苦労なくビルドできます.


* V8エンジンとは

C++で書かれたJavaScriptエンジン.

Googleが作ってるのできっと強い.

C++側に埋め込んで、JSでスクリプティングができる. わー.

主にC++の変数、関数、クラスなどとJacaScriptのオブジェクトの仲介部分を書いていく感じになります.

公式のサンプルを読めば何となく分かるので、それっぽく書くと何か動きます.

汎用性のあるラッパーを作るのが難しい.

用途としては、ゲーム内の敵の動きを記述しようと思ってましたが、意外といろいろできそうでした.
(json形式で書かれた設定の読み込みとか)

ある程度ラップしたもの
[C++側]
cpp

[js]
js

[出力]
res
(logはcompileのときに中で埋め込んでます. 標準出力してるだけです)


* 3Dモデル読み込み
基本的に、標準でサポートされていません.
自分で解析して読み込みましょう. (白目)

C++で文字解析はつらいです
[解析手段]
  1. 頑張る → つらい
  2. boost::spirit::qi → ✌('ω')。o(???????????????)
  3. C++が読みやすいような中間データを作成する → 悪くはないかもしれない
  4. ライブラリを使う → 最適解
  5. 上記のJSスクリプティングで読み込む → 新規性を感じる
JSだと楽にかけて意外と良いのでは~

そんなわけで5でやってみました.
できました.
matcha01

メタセコイアっていうソフトで作られたmqo形式のモデルです.
(まだ完全ではないです.)
こっそりライティングをしていますが、この話はまた次回辺りで...

ちなみに、Debugビルドだと、解析にめっちゃ時間かかります.
Releaseならなんとか実用的かもしれないです

* その他

Q. Unity使わないの?

ゲームエンジンも作りたいので...
逆に、すぐに動くゲームを作りたいのならUnity一択な時代ですね.

Q. Luaは?
使ったことないです


Q. OpenGL と DirectX の違い

 どっちもでもいいと思います.

 ただ、ライブラリ面ではOpenGLの方が充実していて楽に書けると思います.

DXライブラリはDirectX9までなので、DirectX10以降を使う場合は直打ち不可避です.


Q. OpenGL4.0, DirectX11 とは

 どちらも最先端の機能を使うことができます.(PCの性能にも依りますが)
比較的新しいので、ネット上の情報は少なく、書籍を参考にしたり、英語の公式ドキュメントやサンプルを読む力が必要です.
OpenGL2.0やDirectX9でも十分なクオリティのゲームを作れますし、動作する環境も多いので、わざわざ新しいものを使う必要は無いのかもしれません.
でも一番新しいもの使ってみたいですよね?

* 今後の予定
  • ライティング、影の描画など
  • シェーダーでいろいろ特殊効果を実装してみる
  • Defferd Shadingしてみる
  • OpenALで音を鳴らしてみる
  • OpenGLのいろんな機能を試す(テッセレーションとか)
  • ゲーム本体を作る

工大祭までにそれなりのものを作りたいですね...
それでは(。・ω・)ノ゙


ソースです. 汚いです. 読めないです. いじめないであげてください.
github