Androidで3Dゲーム作成(最初の一歩)

先日公開した「Space defender」の方が落ち着いてきたので、そろそろ次のネタを考えなければなりません。
そこで、ぜひとも一度挑戦してみたかった「Androidで3Dゲームを作ろう!」の方向で行こうと思います。

Androidで3Dというと、OpenGLになるようです。
OpenGLは本業の方でも触ったことがあるので、何とかなるだろーと言う事で、情報集めです。
1.AndroidでOpenGLを使う場合、GLSurfaceViewを使うらしい
WindowsでOpenGLを使う場合、GLUTで独自ウィンドウを作るか、ウィンドウのデバイスコンテキストとレンダリングコンテキストを結び付けてやったりと、非常に面倒なのですが、GLSurfaceView使うと簡単にOpenGLが使えるみたいです。
当初、GLSurfaceViewを継承した独自ビューを作る必要があるのかと思ったのですが、GLSurfaceView.Rendererをimplementsしたレンダークラスを作成して、そちらに描画処理等を書くようです。
参考にしたのはこちら「OpenGL ES Tutorial for Android – Part I – Setting up the view」
こちらを参考にゴリゴリやって、できたのがこれです。

画像

3D的な四角が表示されているはずなのですが、どう見ても2Dです。
参考サイトのチュートリアルを読み進めていくと、基本となるMeshクラスを定義し、頂点配列を与えてキューブを表示する辺りまで行きます。
でもやっぱり2Dです。
そこで、「Space defender」用に作成した自機の3Dモデルを表示することにしました。
表示するには、頂点座標が必要ですので、Wavefront OBJ形式にエクスポートします。
これには、頂点と頂点の法線の羅列と、面を構成する頂点のインデックス番号が出力されています。
これを自作のコンバータを通して、Javaの配列定義文へ変換します。
ここまで出来てしまえばあとは簡単。
で、表示したのがこれ

画像

何かがおかしい。色が付いてないとかそんなことではなく、形が崩れている。
調べてみると、3Dモデル作成にShadeを使ったのですが、これで出力したOBJファイルは、面を構成する頂点の辿り方が逆になってしまう場合があるようです。
上の画像で黒くなっているところは、面が反転してしまっているところです。
法線を表示して、面を反転させて等など、色々やってみたのですが、う~ん、これは面倒くさい。
いっそ、モデル作成からやり直した方が簡単そうです。
自在に仮想空間を飛び回るのは、ずいぶん先のことになりそうです。

Leave a Reply

This blog is kept spam free by WP-SpamFree.