NetBeans OpenGL Pack

前回はJavaでOpenGLを利用するためのAPIであるJOGL(JSR 231: Java Binding for the OpenGL®API)その実装について紹介した。今回はこれを利用して実際に3Dプログラムを作ってみたいが、その前に、NetBeansでのOpenGLプログラミングをサポートする「NetBeans OpenGL Pack」というプラグインを紹介しておきたい。

NetBeans OpenGL PackはNetBeans 6.0以上のバージョンにしか対応していないが、JOGLを用いたOpenGLプログラミングをサポートするさまざまな機能を提供してくれる。提供されるのはたとえばJOGLアプリケーションのためのプロジェクトテンプレートやビューア、Matisseに対するJOGLのGUIコンポーネントのインテグレーションなどだ。またJOGLのデモやドキュメント、GLSL (OpenGL Shading Language)のためのShaderエディタなども用意されている。

NetBeans OpenGL Packはアップデートセンターを利用してインストールできる。まずこのリンクより「net-java-nboglpack-updatecenter.nbm」をダウンロードし、NetBeansを起動してプラグイン・マネージャの[ダウンロード済み]タグよりインストールを実行する (図1)。

続いて[設定]タブに移動し、図2のように[NetBeans OpenGL Pack Update Center]にチェックを入れた上で、[インスト-ル済み]タグに移動して[カタログの再読み込み]ボタンをクリックする。

すると[使用可能なプラグイン]タグのページに図3のようにNetBeans OpenGL Packに含まれるプラグインの一覧が表示されるので、全てにチェックを入れてインスト-ルを実行する。

図1 NetBeans OpenGL Packのインストール1

図2 NetBeans OpenGL Packのインストール2

図3 NetBeans OpenGL Packのインストール3

最後にNetBeansを再起動すれば、JOGLプログラミングのための機能が有効になるはずだ。

JOGLプロジェクトの作成

NetBeans OpenGL Packを利用すると、プロジェクトマネージャによってJOGLアプリケーションのためのプロジェクトを作成することができる。同時に、JOGLを利用したプログラムの雛型クラスを生成してくれる。この雛型のクラスにはJOGLを使う上で最低限必要なコードが記述されており、これをベースにすれば比較的OpenGLプログラミングにも入り込みやすいと思う。

JOGLプロジェクトを作成するには、プロジェクトエクスプローラ上で右クリックして[新規プロジェクト]を選択し、プロジェクトマネージャで[OpenGL]→[Simle JOGL Application]を選択する (図4)。そして次の画面で図5のようにプロジェクト名とパッケージ名、ターゲットとなるプラットフォームを指定する。

図4 JOGLプロジェクトの作成1

図5 JOGLプロジェクトの作成2

プロジェクトが作成されると、指定したパッケージの下にプロジェクト名と同名のJavaクラス(本稿の例ではJoglSample.java)がひとつ生成されているはずだ (リスト1)。これがJOGLプログラムのための雛型になる。まずはこのコードからJOGLプログラムの一連の流れを解説する。

JoglSampleクラスはjavax.media.opengl.GLEventListenerというインタフェースをひとつ実装している。JOGLのプログラムはイベントドリブンで動作し、GLEventListenerが各イベントを受け取るリスナーになっている。このリスナーインタフェースには以下の4つのメソッドが定義されており、プログラミングの際にはこれらを独自に実装すればよい。

  • init: 起動時に1度だけ初期化のために呼び出される
  • reshape: 表示領域が変更された際に呼び出される
  • display: 描画を行う際に呼び出される
  • displayChanged: 表示モードや表示デバイスが変更された際に呼び出される

リスト1 JoglSampleクラスの概観(各メソッドの詳細は後述)

package apisample;

import com.sun.opengl.util.Animator;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;

public class JoglSample implements GLEventListener {
    public static void main(String[] args) { ... }

    public void init(GLAutoDrawable drawable) { ... }

    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { ... }

    public void display(GLAutoDrawable drawable) { ... }

    public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) { ... }
}

さて、だいぶ前置きが長くなってしまったが、次回はこの雛型として生成されたクラスを元にJOGLプログラムの中身を追ってみようと思う。