2009年5月17日日曜日

JavaFXでJOGLを動かす - 0.枠だけ

研究室でJavaFXでJOGLを動かすことになったので、それのメモ書き。

同じプロジェクトの方が勉強して、サンプルソースを下さったので有難く使わせてもらいます。
ただ、単なるパクリでは力にならないので、勉強してみる。

まず、
「OpenGLを使ってJavaでも3Dを楽しもう」第3回 プログラムで3Dを表示する
を見ながらJOGLの窓だけ開くコードを勉強する。
次に、貰ったサンプルとのANDをとって、骨組みだけ残してみる。
すると、こうなる。

Gl_Simple.java(JOGLの方)
package fx_testSample0;

/*
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
*/

import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
//import javax.media.opengl.GLCanvas;

public class Gl_Simple implements GLEventListener{

    public Gl_Simple() {
        /*
        Frame frame = new Frame("Simple Cube");

        // 3Dを描画するコンポーネント
        GLCanvas canvas = new GLCanvas();
        canvas.addGLEventListener(this);

        frame.add(canvas);
        frame.setSize(300, 300);

        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        frame.setVisible(true);
        */
    }

    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) {}

}
Frame部分がごっそり抜ける。で、このFrame部分をJavaFXにしてしまえばいいって事らしい。

Fx_Simple.fx
package fx_testSample0;

import javafx.stage.Stage;
import javafx.scene.Scene;

import javax.media.opengl.GLJPanel;
import fx_testSample0.Gl_Simple;
import javafx.ext.swing.SwingComponent;

var panel:GLJPanel = new GLJPanel();
panel.addGLEventListener(new Gl_Simple());

var swingComp:SwingComponent = SwingComponent.wrap(panel);{
    swingComp.height = 300;
    swingComp.width = 300;
}

Stage {
    title : "SimpleFrame"
    scene: Scene {
        width: 300
        height: 300
        content: [
            swingComp
        ]
    }
}
まだ JavaFX も勉強途中。JOGL も勉強途中。Java の Swing も勉強と(ry

先は長そうです。