Java OpenGL JOGLを使う 〜3Dモデルを読み込むために1〜

今まで、プロコン用ゲームを作成するために、仕様の作成を行なっていましたが、ちょいと仕様作成につまづいて(調査することが多いため)ゲームで使用する(使用したい)3Dモデルの読み込みアプリを作成しようと考えています。

以前、LWJGLを使用して実装したのですが、ライセンスなどが、面倒なのとインストール(セットアップ)が面倒なのでシンプルにJOGLを使用してみようと考えています。

JOGL= OpenGL

Java版のOpenGLということらしいです。LWJGLでも同じようなメソッドとかクラスとか使用していました。
なので、LWJGLよりも使いやすいと思ったのです。

早速写経

参考サイトはこちらです
写経したものを、実行してみます。クラス名は自分の作成したクラス名になっています。そして、オーバーライドするメソッドが増えていたので、それも追加しました。

public class ModelUtil implements GLEventListener {
    @Override
    public void display(GLAutoDrawable drawable) {
        final GL2 gl = drawable.getGL().getGL2();

        gl.glBegin (GL2.GL_LINES);//static field
        gl.glVertex3f(0.50f,-0.50f,0);
        gl.glVertex3f(-0.50f,0.50f,0);
        gl.glEnd();

     }

    @Override
    public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
    }

     @Override
     public void dispose(GLAutoDrawable arg0) {
     }

     @Override
     public void init(GLAutoDrawable arg0) {
     }

     public static void main(String[] args) {

        final GLProfile profile = GLProfile.get(GLProfile.GL2);
        GLCapabilities capabilities = new GLCapabilities(profile);

        final GLCanvas glcanvas = new GLCanvas(capabilities);
        Line l = new Line();
        glcanvas.addGLEventListener((GLEventListener) l);
        glcanvas.setSize(400, 400);

        final JFrame frame = new JFrame ("straight Line");

        frame.getContentPane().add(glcanvas);

        frame.setSize(frame.getContentPane().getPreferredSize());
        frame.setVisible(true);
    }
}

描画するのに使用するのはJavaFXではなく、「Swing」のようです。
サンプルはこちらのサイトにありました。

写経してみて

動画にありますが、写経後に色々と気がつくことが多いです。
とりあえずは、今回作成したコードからして、画面に何かしらを描画するためには下のクラスを使用する必要があるということがわかりました。

  1. GLProfile
  2. GLCapabilities
  3. GLCanvas
  4. GLEventListener

コードを眺める

今回作成した「ModelUtil」クラスはGLEventListenerの実装クラスです。
このインターフェースクラスを実装(implements)すると必ず、下のメソッドをオーバーライドしなくてはいけません。
Javaはそういうルールをコンパイラで作っています。→このようにしないとビルドエラーになるということです。

  1. display()
  2. reshape()
  3. dispose()
  4. init()

ちなみにこれらのメソッドはから実装です(笑)。下のような形です。

@Override
public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
}

 @Override
 public void dispose(GLAutoDrawable arg0) {
 }

 @Override
 public void init(GLAutoDrawable arg0) {
 }

それでも、Mainメソッドで動かしているので問題なく表示できました。

とりあえず、写経して線を引いただけですが、ここからVoxcelやBlenderなどで作成した#Dモデルを表示することを目指します。

でわでわ。。。

関連ページ

  1.  Chapter1[外枠の表示のみ]
  2. Chapter2-1〜クラスの構成〜
  3. Chapter2-2〜インターフェースの使い方と詳細〜
  4. Chapter2-3〜GameEngineクラス(サンプルクラス)〜/li>
  5. Chapter2-4〜Windowクラス(サンプルクラス)〜
  6. Chapter3〜描画処理を読む〜
  7. Chapter4〜シェーダについて〜
  8. Chapter5-1〜レンダリングについて〜
  9. Chapter5-2〜レンダリング詳細〜
  10. Chapter6〜Projection(投影)〜
  11. Chapter7-1〜Cubeを作る〜
  12. Chapter7-2〜Texture〜

@Override
public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
}

@Override
public void dispose(GLAutoDrawable arg0) {
}

@Override
public void init(GLAutoDrawable arg0) {
}