LWJGL で Hello world してみる(環境構築編)
LWJGL や JOGL といったライブラリを使うと、Java で OpenGL を使うことができます。触ってみた感じ、両方とも OpenGL をほぼそのままの形で呼び出せるので、どっちを使うかは好みで決めてもいいくらいです。わたしの場合は最初に触ったのが LWJGL だったので、LWJGL でゲーム開発をしています。LWJGL は正式名称を Lightweight Java Game Library といい、Java から OpenGL を呼び出すための Java 用クラスを提供しています。Java でゲームを作ろうとすると、3D 系は特に pure Java では弱い印象なので、そこを強化するためにグラフィックス描画では OpenGL を採用するのが妥当なのかな、と個人的には感じています。
ゲームライブラリと名のついているだけあって、他にも高精度のタイマーやキー入力系など、ゲームプログラミングをする上では便利な API が用意されています。
JOGL は比較的に日本語の資料も多いのですが、LWJGL は入門者向けのまとまった資料があまりない印象だったので、記録を残す意味でも少しずつ書いていってみようと思います。
ということで、今日は Eclipse での環境構築と、四角形を描くところまで。ブログのネタに困ったとかじゃないよ!ホントだよ!
インストール
ぶっちゃけ、やることは2つだけです。・lwjgl.jar に Java の CLASSPATH を通す
・LWJGL のダイナミックリンクライブラリを、実行時に java.library.path で指定する
最新の LWJG0L は公式サイトのダウンロードページから落とせます。この中に必要なものは全部入っています。
私は maven 派なので、今回は maven で Eclipse プロジェクトを作っていこうと思いますが、わかる方はサクッと読み飛ばしちゃってくださいー。
前提
開発環境として、以下がインストールされているという前提です。・Java (JDK)
・Eclipse
・maven
JDK と Eclipse のインストール方法は探せばたくさん情報があると思うので割愛します。
Eclipse は GUI の Java 開発環境ですね。Alt + / でコード補完してくれたり、実行中にコード書き換えられたりできて超便利です。
maven はプロジェクト管理ツールです。必要な jar を自動で取ってきたりしてくれるので、こちらもおすすめ。
maven を使う場合、LWJGL のダウンロードと CLASSPATH の設定は maven が自動でやってくれるので、LWJGL 自体を落としてくる必要はありません。便利ですねー。
Linux 使いな人は自分で入れられると思うので、Windows 環境だけ、良さそうなインストール方法をリンクしておきます。
Maven2 インストール(Java6.0)
maven でプロジェクトを作る
わたしの環境は Linux なので、まずは Linux ターミナル用での操作を書きます。ターミナルを開いたら、Eclipse のワークスペースのディレクトリ(~/workspace とします)に移動して、mvn コマンドを実行します。
$ cd ~/workspace $ mvn archetype:create -DgroupId=test -DartifactId=test実行するとワークスペースの中に test というディレクトリが作成されます。この中にあるファイル一式が作成された、空の maven プロジェクトです。
Windows 環境の場合でも、コマンドプロンプトで同じことをします。コマンドの名前や使い方は Linux と違いますが、やることは感じです。
ここでは Eclipse のワークスペースを C:\eclipse\workspace とします。
E:\>cd /d C:\eclipse\workspace C:\eclipse\workspace> mvn archetype:create -DgroupId=test -DartifactId=test同じく test というディレクトリが作られます。絶対パスでは C:\eclipse\workspace\test ですね。
mvn コマンドの引数として指定した artifactId はプロジェクト名、groupId はプロジェクトのグループ名になります。わかりづらくなるので、他のプロジェクトとかぶらない名前をつけましょう。
とりあえず今は最初なので、両方とも適当に test とかにしとけば ok です。maven に慣れたら凝った名前をつけてみてね。
maven の使い方は Maven2のTipsを集めるWiki がすごく良くまとまってるので参考にしてみてください。
LWJGL を使えるようにプロジェクトを設定する
作成した maven プロジェクトは空っぽの状態なので、LWJGL を使えるように設定します。maven プロジェクトのディレクトリの中に pom.xml という設定ファイルがあるので、これをテキストエディタで編集していきます。
以下のように、2箇所書き足してみてください。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ... <dependencies> <!-- LWJGL の設定その1 --> <dependency> <groupId>org.lwjgl.lwjgl</groupId> <artifactId>lwjgl</artifactId> <version>2.8.2</version> </dependency> <!-- LWJGL の設定その1 --> ... </dependencies> <!-- LWJGL の設定その2 --> <build> <plugins> <plugin> <groupId>com.googlecode.mavennatives</groupId> <artifactId>maven-nativedependencies-plugin</artifactId> <version>0.0.5</version> <configuration> <nativesTargetDir>natives</nativesTargetDir> <separateDirs>false</separateDirs> </configuration> <executions> <execution> <id>unpacknatives</id> <phase>generate-resources</phase> <goals> <goal>copy</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <!-- LWJGL の設定その2 --> </project>
プロジェクトを Eclipse で使えるようにする
そうしたらあとは maven プロジェクトを Eclipse で読めるようにします。先程の Linux ターミナルで、以下のコマンドを実行してみてください。
$ cd test $ mvn nativedependencies:copy $ mvn clean eclipse:eclipse -DdownloadSources=true -DdownloadJavadocs=true
Windows の場合もコマンドは同じです。
C:\eclipse\workspace> cd test C:\eclipse\workspace\test> mvn nativedependencies:copy C:\eclipse\workspace\test> mvn clean eclipse:eclipse -DdownloadSources=true -DdownloadJavadocs=true
最初のコマンドでは引数に nativedependencies:copy を指定していますが、これで LWJGL で必要になるダイナミックリンクライブラリがダウンロードされます。ダイナミックリンクライブラリがコピーされるのは pom.xml の <nativesTargetDir> で指定したディレクトリ(上の設定だと natives)の中です。
このディレクトリは maven プロジェクトのディレクトリ内に作られるので、ここまでの例でいうと、Linux では ~/workspace/test/natives、Windows では C:\eclipse\workspace\test ですね。
2つめのコマンドが、作成した maven プロジェクトを Eclipse のプロジェクトとして読み込めるようにするものです。
-DdownloadSources と -DdownloadJavadocs オプションもつけていますが、こうすると lwjgl.jar のソースコードと Javadoc もダウンロードして Eclipse で見れるようになります。とりあえずつけておくと後で幸せになれるかもしれません。
pom.xml の設定が正しければ、2 つとも成功して BUILD SUCCESSFUL と表示されます。
Eclipse で作ったプロジェクトを読み込む
作った maven プロジェクトをディレクトリごと Eclipse にインポートします。Eclipse を起動して、パッケージエクスプローラーを開いたら、右クリック→「インポート...」 から、「既存のプロジェクトをワークスペースへ」を選び、先ほど meven で作った test ディレクトリを読み込みます。
これでプロジェクトの作成は完了です。
LWJGL で四角形を表示する
それでは、実際に OpenGL で四角形を描いてみます。ついにソースコードの出番です。Eclipse のパッケージエクスプローラーで test パッケージを開いたら、DrawQuad というクラスを作ってください。そうしたら以下のソースコードをコピペしましょー。
package test; import static org.lwjgl.opengl.GL11.GL_BACK; import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT; import static org.lwjgl.opengl.GL11.GL_CULL_FACE; import static org.lwjgl.opengl.GL11.GL_MODELVIEW; import static org.lwjgl.opengl.GL11.GL_PROJECTION; import static org.lwjgl.opengl.GL11.GL_QUADS; import static org.lwjgl.opengl.GL11.glBegin; import static org.lwjgl.opengl.GL11.glClear; import static org.lwjgl.opengl.GL11.glColor3f; import static org.lwjgl.opengl.GL11.glCullFace; import static org.lwjgl.opengl.GL11.glEnable; import static org.lwjgl.opengl.GL11.glEnd; import static org.lwjgl.opengl.GL11.glLoadIdentity; import static org.lwjgl.opengl.GL11.glMatrixMode; import static org.lwjgl.opengl.GL11.glOrtho; import static org.lwjgl.opengl.GL11.glVertex3f; import org.lwjgl.LWJGLException; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.DisplayMode; /** * Java + LWJGL で四角形を描いてみるサンプル */ public class DrawQuad { private int width = 300; private int height = 200; private int depth = 100; public void start() { try { // ウインドウを生成する Display.setDisplayMode(new DisplayMode(width, height)); Display.setTitle("hello world!"); Display.create(); } catch(LWJGLException e) { e.printStackTrace(); return; } try { // OpenGL の初期設定 // ポリゴンの片面(表 or 裏)表示を有効にする glEnable(GL_CULL_FACE); // ポリゴンの表示面を表(裏を表示しない)のみに設定する glCullFace(GL_BACK); glMatrixMode(GL_PROJECTION); glLoadIdentity(); // 視体積(描画する領域)を定義する glOrtho(0, width, 0, height, 0, depth); glMatrixMode(GL_MODELVIEW); while (!Display.isCloseRequested()) { // オフスクリーンを初期化する glClear(GL_COLOR_BUFFER_BIT); // オフスクリーンに描画する render(); // オフスクリーンをスクリーンに反映する Display.update(); } } catch(Exception e) { e.printStackTrace(); } finally { Display.destroy(); } } private void render() { // 次に指定する4つの座標を、描く四角形の頂点として認識させる glBegin(GL_QUADS); // OpenGL では頂点が左回りになっているのがポリゴンの表となる // 今は表のみ表示する設定にしているので、頂点の方向を反対にすると裏側となり、表示されなくなる glColor3f(1.0f, 0.5f, 0.5f); // 次に指定する座標に RGB で色を設定する glVertex3f(width - 50, height- 50, 0); // 1 つめの座標を指定する glColor3f(0.5f, 1.0f, 0.5f); glVertex3f(50, height - 50, 0); // 2 つめの座標を指定する glColor3f(0.5f, 0.5f, 1.0f); glVertex3f(50, 50, 0); // 3 つめの座標を指定する glColor3f(1.0f, 1.0f, 1.0f); glVertex3f(width - 50, 50, 0); // 4 つめの座標を指定する glEnd(); } public static void main(String[] args) { new DrawQuad().start(); } }今回はソースの解説はしません(笑
デバッグ実行する
さっそく実行…といきたいところですが、実行時には忘れずに LWJGL の ダイナミックリンクライブラリを Java の VM の引数に指定する必要があります。Eclipse のメニューの「実行」→「デバッグ...」を選びます。
新しく設定ウインドウが開くので、左の構成欄の「Java アプリケーション」をダブルクリックしましょう。新しいデバック設定が作られます。
プロジェクト欄に「test」、メイン・クラス欄に「test.DrawQuad」と入力されていることを確認したら、その上の引数タブを押します。
VM 引数という欄に『-Djava.library.path=natives』を入力します。
natives というのは pom.xml の <nativesTargetDir> で設定したディレクトリのことです。
Eclipse はプロジェクトのディレクトリ内で実行されるので、その中にある natives を相対パスでしています。
あとは「適用」を押せば設定が保存され、さらに「デバッグ」を押せばデバック実行できます。
ちなみに、デバックの設定は最初の1度だけで、次からは F11 を押すだけで実行できます。
no lwjgl in java.library.path エラーが出たら
LWJGL のダイナミックリンクライブラリがちゃんと指定されていないと、こんな感じでエラーが出ると思います。 Eclipse のデバッグ設定の -Djava.library.path の値が正しいか確認してください。指定したディレクトリには liblwjgl.so(Windows 環境なら lwjgl.dll)等のファイルが入っているはずです。Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738) at java.lang.Runtime.loadLibrary0(Runtime.java:823) at java.lang.System.loadLibrary(System.java:1028) at org.lwjgl.Sys$1.run(Sys.java:73) at java.security.AccessController.doPrivileged(Native Method) at org.lwjgl.Sys.doLoadLibrary(Sys.java:66) at org.lwjgl.Sys.loadLibrary(Sys.java:95) at org.lwjgl.Sys.<clinit>(Sys.java:112) at org.lwjgl.opengl.Display.<clinit>(Display.java:135) at test.DrawQuad.start(DrawQuad.java:37) at test.DrawQuad.main(DrawQuad.java:99)
LWJGL で Hello world したった!
最初なので環境構築を中心になるべく丁寧に書いてみました。Eclipse とかの細かい使い方はたぶんもう解説しないと思うので、いろいろいじってみてください。慣れちゃえばほんと便利ですよー。サンプルのソースコードの解説は次回です。
LWJGL, Linux コメント (0) 2012/03/01 00:20:54