前回に引き続き、次はOBJファイルのロード(読み込み)を行います。
Git bookのページはこちら
参照するGithubはこちらです。
OBJファイルロード
作成したものは、以下のものです。(コピーして作成)
手順
Gitをクローンする
まずは、学習に使用するGitプロジェクト(LWJGL3のチュートリアル)をクローンします。
ここのリンクにGit bookがある(PDF)のでこのプロジェクトで行なっている内容の解説をしています(英語ですが。。。)
プロジェクトを移植する
これは、プロジェクトをクローンした時に、フォルダの階層が、1プロジェクト=chapter1-29になっているのでプロジェクトとして動きません。(まとめてクローンした場合)
まとめてクローンした場合は、プロジェクト単位で抜き出してやる必要があります。ビルドパスの関係ですね。。。
自分の場合は以下のようにやりました。
単純にクローン下プロジェクトの必要な部分(プログラムのパッケージ以下)をコピーして貼り付けてやるだけです。
そして、プログラムのビルドエラーが出ると思うのでそれを解消してやる必要があります。
ビルドエラーの原因としては、「クラスが見つからない」がほとんどです。なので、参照されるクラスが全てビルドパス上に存在すれば良いということです。
セットアップ時には、resourcesファイルも使用するのでこれも忘れないようにコピーしてあげましょう。
OBJファイルのロード
OBJファイルを読み込んでロードする。これの詳細は[Gitbookを見た方が良い]()のですが、如何せん英語なんだなぁ。。。コードと翻訳機能で、読んで見た所以下のようにまとまりました。
・Chapter9にOBJファイルの中身の解説
・Chapter10に光の当て方の解説
OBJファイルをロードするのには
An OBJ file defines the vertices, texture coordinates and polygons that compose a 3D model.
と記載があるように、
- 各頂点
- テクスチャを貼り付けるための座標
- ポリゴンの座標
上記のデータをもとに、表示しますのでここの情報をOBJファイルからロードして必要な情報をモデルに設定します。
学習の進め方
これは自分の一番やりやすかった方法ですが、記載しておきます。
- Githubから参考にするプロジェクト(ソース)をクローン
- 説明などがあるドキュメント(今回はGit book)を用意
- 対象のChapterを読みながら、プログラムを読む。
- アプリを動かす。
シンプルかつ、時間がかかるけど一番効率の良い方法だと思います。
ポイントになるコード
上にあるように、DummyGameクラスがポイントになります。
public class DummyGame implements IGameLogic
上に示すように、このクラスにはIGameLogic
というインターフェースが実装されているので、このインターフェースクラスで定義されているメソッドをオーバーライドすれば、基本的には動くものが作成できます。
サンプルとして「DummyGame」があると思うと飲み込みやすいのではないでしょうか?
そして実装するメソッドは以下のIGameLogoicの中身を見ればわかります。
public interface IGameLogic { // 初期表示する内容を実装します、今回はロードしたOBJファイルです。 void init(Window window) throws Exception; // ここには、入力した時どのようなアクションを起こすか定義します。 void input(Window window, MouseInput mouseInput); // 画面の更新処理です。 void update(float interval, MouseInput mouseInput); // レンダリング(画面更新):ここら辺がまだ理解できていません。。。 void render(Window window); // 画面の初期化、再描画するのに必要 void cleanup(); }
今後の予定
とりあえずは、OBJファイルがロードできたのでここからアニメーションさせる方法を考えたいと思っています。Git bookにあるアニメーションのソースをそのまま起動できませんでしたので(Macだからか?)もとに戻り(Chapter10)サイド学習を進める方向にシフトします。
でわでわ。。。
関連ページのメニュー
LWJGLの学習履歴
Git bookの内容を学習しました。