2009年2月5日木曜日

ウィンドウ


今日は特にこれといった進展はありません。というか、やること多すぎて、何から手をつけていくべきか思案中なのです。

とりあえず、気晴らしに四角形を表示させてみました。なんでかというと、ゲームを作るうえでは、色々なパラメータを設定したりする画面が必要になると思うんですが、当然ながらこれも手作りになります。つまり、UI(ユーザインターフェース)のデザインも機能も自分で用意しなきゃならんのです。めんどくせー。でもま、OSが提供する素の部品が使えたとしてもゲーム用としてはなんだか素っ気無いし、どっちみち作らないといけないのです。

で、その時に気をつけないといけないのが、特に3Dのゲームの場合は、ゲームのキャラクターや彼らが行動するゲームシーンの描画とUIのウィンドウの描画を分けて管理しないといけないということです。3Dのゲーム世界には上下左右の他に奥行きがあります。遠くのものは小さく、近くのものは大きく見えるという遠近感があります。だけどウィンドウには奥行きは必要ありません。画面の上下、左右にだけ動かせれは通常は問題ありません。(最近は3Dデスクトップなどというものがあったりしますが、ここでは無視ということで...)

で、この遠近感のある描画(透視投影)とそうでない描画(正投影)を切り替えるのが以下の処理になります。

透視投影

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, width/height, 0.1f, 100.0f);


正投影

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, width, 0.0, height);

それぞれ投影用の行列を初期化した後、変換の設定をしています。

gluPerspective(...)の方は、視野角と投影面の縦横比(画面サイズに合わせています)と奥行きの範囲を指定しています。

gluOrtho2D(...)の方は単純に、画面の横と縦のサイズを指定しています。

実はこれらはgluというプレフィクスで始まっていることからわかるように、GLU(OpenGL Utility LIbrary)の関数なんですね。GLUはOpenGLの低レベルなコマンドを使って便利な関数を提供してくれています。OpenGLを使った開発を行う場合には必須のライブラリといってもいいと思います。OpenGLの投影用のコマンドとしては、glFrustum(...)やglOrtho(...)という関数があるんですが、ここは素直にglu〜の方を使っときましょ。

上の画像の立方体が透視投影で、薄緑の矩形(仮のWindowということで)が正投影で描画したものですが、ちょっとわかり難いですね。あと、少し透かしています。

つか、仕事が忙しくてあまり時間がとれない。土日にがんばるかな。はぁ...

0 件のコメント: