i-mode
OpenGL Page
ホームMacintoshOpenGLThinkPadJavaダイビング水中デジカメ


インデックス

OpenGL
作品紹介
glufo
gldice
gldisc
gloyaji
gllogo

OpenGL Tips
ゲーム
CodeWarrior

リンク
ダウンロード

OpenGL ゲームプログラミング

私が OpenGL を使ってゲームを作った時に思ったこと、プログラミングのコツ等をここに書いていきます。

ダブルバッファを使う

ゲームのようにリアルタイムで画面を更新する必要がある場合に、シングルバッファでレンダリングをすると、書替え時に画面がちらついてしまいます。そこで、ダブルバッファを有効にして表示していない方のフレームバッファに書替えを行うことで、ちらつきを抑えます。

デプスバッファを使わない

デプスバッファを用いて、物体の遠近を判定させれば、正しい画像が得られる事は言うまでもありません。しかし、この処理はピクセルごとの判定をともなうため、大きな負荷になります。リアルタイム・ゲームにおいては、物体の遠近の判定は自分で行うか、物体の前後関係が決まっていて変化しないようにデザインするかした方がいいでしょう。

テクスチャ・マッピングを使わない

3D アクセラレータのためになぜあなたが AGP バスのシステムを買わなくてはならないか、知っていますか。それはこのテクスチャ・マッピングのせいなのです。3次元モデルの各面に2次元の画像を張り付けていくこの処理は、CPU への大きな負荷となるとともに、膨大なメモリ資源を要求します。AGP バスはメインメモリから 3D アクセラレータへ、効率的に画像を転送するためのバスなんです。私は、基本的に 3D アクセラレータのいらない(というか私自身が持っていない(っていうか OS/2 では使えないんだよちくしょー))ゲームを作るつもりなので、テクスチャマッピングを使ったことはありません。

キーボード入力をどうするか

OpenGL のユーティリティライブラリ(GLUT)に実装されているキーボード関係の機能は、基本的にキーボード割り込みを受けるようにしか出来ていないようです。これでは、キーがたたかれた時、もしくはキーリピートの信号が入った時にしかキーが押されたとは判定されません。能動的に「今、このキーは押されているか」という情報を取得するようなシステムにはなっていないのです。そこで、リアルタイム・ゲームで必要なキー情報を取得するには、プラットフォームに依存した API を使う必要があります。それが面倒、もしくは私のようにプラットフォームに依存したコードはこれっぽっちも書きたくないというわがままな人は、マウス操作のみのゲームを作るか、キーリピートがかかる(一度押しただけで押しっぱなしと判定される)ようにするしかありません。


コンテンツ: [ホーム] [Macintosh] [OpenGL] [ThinkPad] [Java] [ダイビング] [水中デジカメ]

このページについてのご質問はこちらへどうぞ。
このページに用いられている3Dのロゴやボタンは全てGLlogoによってレンダリングされたものです。
このページはリンクフリーです。
著作権等についてはこちらをどうぞ。