irrlichtを初期化して、空のウィンドウを表示します。
irrlichtは初期化と同時にウィンドウを生成してくれるので、CreateWindowなどのAPIを呼び出す必要はありません。

| #include
<tchar.h> #include <irrlicht.h> #ifdef WIN32 #include <windows.h> #endif using namespace irr; using namespace core; using namespace video; #ifdef WIN32 int WINAPI _tWinMain( HINSTANCE,HINSTANCE,LPTSTR,int ) #else int main( int,TCHAR* ) #endif { // irrlichtを初期化。 IrrlichtDevice *device = createDevice(EDT_OPENGL, dimension2d<u32>(480,360)); //ビデオドライバーを取得 IVideoDriver* driver = device->getVideoDriver(); // タイトルバー文字列設定 device->setWindowCaption(_T("Hello World!")); // 描画ループ while(device->run() && driver) { driver->beginScene(true, true, video::SColor(255,0,0,255)); driver->endScene(); } // デバイスの削除 device->drop(); return 0; } |
| #include
<tchar.h> #include <irrlicht.h> #ifdef WIN32 #include <windows.h> #endif |
まず、必要なヘッダファイルをインクルードします。UNICODEとマルチバイトに対応するためtchar.hを、
次にirrlichtを使用するためにirrlicht.hを、最後にWindows環境の場合のみwindows.hをインクルードします。
#define WIN32とはWindows上でのみ定義されるプリプロセッサで、メイン関数の部分も、環境により
main関数かWinMain関数に定義されます。
using namespace irr; using namespace core; using namespace video; |
irrlichtのクラスや定数、関数は全て名前空間に振り分けられています。
いちいちirr::video::~~と書くのは面倒なのでusing機能で省略します。
| irr | 全てのクラスや関数、定数が含まれている空間。 | |||
| irr::core | ベクトル、平面、配列、リストが含まれてる空間。 | |||
| irr::gui | グラフィカルユーザーインターフェイスを簡単に作成するための便利なクラスが含まれている空間。 | |||
| irr::io | 入力/出力用のインターフェイスが含まれている空間。 | |||
| irr::scene | シーン管理、メッシュ読み込みやビルボードなどの高レベル描画インターフェイスが含まれている空間。 | |||
| irr::scene::quake3 | quake3?関係が含まれている空間。 | |||
| irr::video | ビデオドライバにアクセスする機能や2D、3Dのレンダリングなどの低レベル描画インターフェイスが含まれている空間。 | |||
| // irrlichtを初期化。 IrrlichtDevice *device = createDevice(EDT_OPENGL, dimension2d<u32>(480,360)); //ビデオドライバーを取得 IVideoDriver* driver = device->getVideoDriver(); // タイトルバー文字列設定 device->setWindowCaption(_T("Hello World!")); |
irrlichtを使用するにはまず、irrlichtデバイスを作成しなければならないので、createDeviceでirrlichtのデバイスを作成します。createDeviceの引数は左から、描画エンジン、画面の大きさとなっています。描画エンジンには
Direct3D8,9、OpenGL、ソフトウェアを選べますが、今回はOpenGLにします。dimension2dは二次元座標を表すテンプレートクラスです。デバイスを作成すれば、irrlichtのエンジンにアクセスできるようになります。
次に作成したデバイスの関数getVideoDriverを使用して、irrlichtのビデオドライバーを取得します。
ビデオドライバーは基本的な描画やプリミティブ(三角形や頂点)単位の描画を行う際に使用します。
最後にsetWindowCaption関数でウィンドウのタイトル文字列をHello World!に設定しています。
createDevice()
IrrlichtDevice* createDevice(
E_DRIVER_TYPE deviceType = EDT_SOFTWARE,
const dimension2d< u32 > & windowSize =
(dimension2d< u32 >(640, 480)),
u32 bits = 16,
bool fullscreen = false,
bool stencilbuffer = false,
bool vsync = false,
IEventReceiver * receiver = 0
);
irrlichtデバイスを作成します。作成したデバイスは、様々なオブジェクトの生成に使用します。
deviceType
: 描画エンジンを設定します。これはEDT_DIRECT3D9やEDT_OPENGLなどを指定できます。
windowSize : ウィンドウのサイズを指定します。
bits
: フルスクリーンでのピクセルあたりのビット数を指定。ウィンドウモードでは無視されます。
fullscreen : フルスクリーンモードが有効か、を指定します。
stencilbuffer
: ステンシルバッファを有効にする場合にtrueを指定します。有効の場合、ステンシルシャドウが使用できます。
vsync : 垂直帰線待ちが有効か、を指定します。
receiver : 使用するユーザーレシーバーのポインタを指定します。
戻り値 : IrrlichtDeviceのポインタ、失敗した場合はNULLが戻ります。
IVideoDriver* IrrlichtDevice::getVideoDriver();
2Dや3Dを描画するためのビデオドライバーを取得します。作成したビデオドライバーは低レベル描画に使用します。
戻り値 : ビデオドライバーのポインタが戻ります。
void IrrlichtDevice::setWindowCaption( const wchar_t * text );
ウィンドウキャプションを設定する。平たく言えば、ウィンドウのタイトルの事です。
text : 新しいキャプションの文字列を指定します。
| // 描画ループ while(device->run() && driver) { driver->beginScene(true, true, video::SColor(255,0,0,255)); driver->endScene(); } |
irrlichtの描画ループです。device->run()はirrlichtのウィンドウが閉じられるまでtrueを返します。
beginSceneはバックバッファや深度バッファ、ステンシルバッファなどのクリアを行い、endSceneはバックバッファをフロントバッファに表示します。irrlichtの描画命令はこのbeginSceneとendSceneの間に書きます。
bool IrrlichtDevice::run();
内部でウィンドウメッセージの処理などを実行しています。
戻り値 : デバイスが動作しているならばtrueが戻ります。
bool IVideoDriver::beginScene(
bool backBuffer = true,
bool zBuffer = true,
SColor color = SColor(255, 0, 0, 0),
const SExposedVideoData & videoData = SExposedVideoData(),
rect< s32 > * sourceRect = 0
);
アプリケーションはレンダリングを実行する前にこの関数を呼び出す必要があります。
この関数ではバックバッファやZバッファがクリアされます。
backBuffer
: trueの場合colorの色でバックバッファがクリアされます。falseの場合はバックバッファはクリアされず、colorは無視されます。
zBuffer : Zバッファをクリアするか指定します。
color : バックバッファをクリアする色を指定します。
videoData : 別ウィンドウにレンダリング結果を表示したい場合に指定します。この機能は全ての描画エンジンに完全に実装されていません。
sourceRect : 表示領域を指定します。この機能は全ての描画エンジンに完全に実装されていません。
戻り値 : 失敗した場合、falseが戻る。
bool IVideoDriver::endScene();
バックバッファをフロントバッファに表示します。アプリケーションはレンダリングを実行した後にこの関数を呼び出す必要があります。
戻り値 : 失敗したらfalse、成功すればtrue。
| // デバイスの削除 device->drop(); |
irrlichtデバイスを削除します。正確には参照カウントを1減らしています。使い終わったら、”create”で始まる関数で取得したオブジェクトは、drop()で削除しましょう。
bool IReferenceCounted::drop();
”create”で作成したオブジェクトを削除します。”load”や”get”等で作成や取得したオブジェクトはdrop()を呼ぶ必要はありません。
戻り値 : オブジェクトが削除された場合、trueが戻る。
初期化して、ウィンドウを表示しただけですがどうでしょうか?難しかったですか?irrlichtは日本語の資料が少なく、英語が苦手な人はそれだけで投げてしまいそうですね。もしわからないところがあれば、リンクにあるirrlichtの日本語サイトか、コメント板にどうぞ。Windows7でしか動作確認していないので、あしからず。
Direct3Dを触ったことがある人は、気づいたと思いますが、irrlichtの関数の形式はそっくりですね。
beginSceneとBeginScene、dropとRelease、createDeviceとDirect3DCreate9など。
では。