RSS2.0

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 での環境構築と、四角形を描くところまで。ブログのネタに困ったとかじゃないよ!ホントだよ!
d1bc38550bfc60450e0905c03d299c5ce6df.png

インストール

ぶっちゃけ、やることは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 を相対パスでしています。

あとは「適用」を押せば設定が保存され、さらに「デバッグ」を押せばデバック実行できます。
d1bc38550bfc60450e0905c03d299c5ce6df.png
やったー!四角形が描けたよー!

ちなみに、デバックの設定は最初の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 とかの細かい使い方はたぶんもう解説しないと思うので、いろいろいじってみてください。慣れちゃえばほんと便利ですよー。
サンプルのソースコードの解説は次回です。
  LWJGLLinux  コメント (0)  2012/03/01 00:20:54


公開範囲:
プロフィール HN: ももかん
ゲーム作ったり雑談書いたり・・・していた時期が私にもありました。
カレンダー
<<2019, 11>>
272829303112
3456789
10111213141516
17181920212223
24252627282930