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

ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

クロスプラットフォームゲーム開発で使えるライブラリとか

TODO C++ ゲーム開発

この記事は

 クロスプラットフォームC++ゲーム開発で使えそうなライブラリを自分のためにまとめてる記事です。

追記

2012/2/15 : orgeとirrlicht engineとOpenALとbulletを追加

そもそも前提条件

  • C++
  • 楽をして
  • そこそこのパフォーマンスを得られる
  • windowslinuxで動く
  • ゲーム開発したい
  • Win32APIとNative DirectXの組み合わせはもう嫌だ

使えそうなライブラリ

Simple Directmedia Library(SDL)

本家:http://www.libsdl.org/index.php
ゲーム開発に必要そうな機能がいろいろ揃ったライブラリ。名前の通りシンプル。
これ単体でも簡単なグラフィックス機能を持っているが、OpenGLと連携させると便利。
マルチプラットフォームで入出力をあれこれ出来るライブラリがこれしか見当たらない。キーボード+マウス+ジョイスティックってなるとこれしか無いのでは?
一応、音声もサポートしている。

OpenGL

本家:http://www.opengl.org/
ハードウェアのグラフィックス機能を使うためのAPIOpenGL自体が状態を記憶してくれるため、関数をポコポコ呼び出すだけでいいという素晴らしさ。でも、複雑な3Dグラフィックス処理はできないとかなんとか?
日本語フォントが使えないというやや面倒な点があるものの、SDL_ttfでサーフェイスからテクスチャを作ってなんとか出来るらしい。

OGRE

本家:http://www.ogre3d.org/
クロスプラットフォーム対応の3Dレンダリングエンジン。レンダリングのみをサポートしていて、外の機能はサポートしてない。
中身はOpenGLとかDirectXとかいろいろサポートしているみたい。
そしてバージョンのブランチ名が冒涜的。
SDLと連携可能。

irrlicht

本家:http://irrlicht.sourceforge.net/
3Dゲームエンジン。音声以外のゲーム開発に必要とおもわれる機能が揃っている?
SDL対応

eigen

本家:http://eigen.tuxfamily.org/index.php?title=Main_Page
行列計算ライブラリ。インラインループ展開やら並列命令やらでかなり早いらしい。
そもそも、科学計算とかに使えるようなライブラリなので線形代数の演算いろいろも入っている。
OpenGLと型の互換性があるとかないとか?

PhysX

本家:http://www.nvidia.co.jp/object/physx_new_jp.html
物理演算ライブラリ。GPUパワーを使って演算を行う。サポートはnVidiaGPUのみ?
当然だが、衝突判定もできる。

Bullet

本家:http://bulletphysics.org/wordpress/
物理演算ライブラリ。オープンソース
MMDとか国内リアルタイム3Dエロゲとか、DxLibでサポートしてるとか、とにかく国内で激アツ?

OpenAL

本家:http://connect.creativelabs.com/openal/default.aspx
マルチチャンネル3Dオーディオを効率的に扱うためのライブラリ。
当然マルチプラットフォーム
音のソースとリスナーを設定して聞こえ方をシミュレート出来るらしい。
SDLの音声再生で満足できなかったらこっち?
サポート的なツールキットであるALUTが存在する

Lua

本家:http://www.lua.org/
スクリプト言語。エンジンをC++で組み込める。
スクリプトとそのパーサを自作しなくていいというのはものすごいメリット。

Boost

本家:http://www.boost.org/
みんな大好きBoost。C++の準標準ライブラリ。痒いところに手が届く、便利な機能が詰め込まれてる。

ffmpeg

本家:http://www.ffmpeg.org/
いろんなメイディアファイルを読み込むのに。主にお世話になるのは圧縮音声ファイルのデコードでしょうか。OPムービーとかあるんならそれをデコードして再生してもいいのかも。あとはプレイ中の画面のリアルタイムファイル出力?

自作しないとダメっぽいもの

メモリプール

 どういうわけか見当たらない。いや、C++標準とかboostにあるのは知ってるけどそういうことじゃない。
 そのうち記事にするかも。

線形リスト

 std::list使えばいいじゃんって言われそうだけど、面倒が多いので専用の線形リストをクラスを作る。大した手間ではない。
 使ってみていろいろわかったら記事にするかも。

bullet vs physx

いろいろハードルが低いのはbullet。
LSI組んでるようなハイエンド環境向けの物理演算したかったらphysxの方が優秀?
でもbulletでもGPGPU出来るみたいなので、なんとも言えない。

導入とか

 こちらは後日、winとubuntuでいろいろ試してから。