2009年5月17日日曜日

JavaFXでJOGLを動かす - 1.WireCubeを表示

サンプルを下さった同研究室の方々と、ネット上に情報をあげてくださっている方々に感謝しながら
WireCubeを表示してみる。

Gl_SimpleCube.java
package fx_simpleCube;

import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;

import com.sun.opengl.util.GLUT;
import javax.media.opengl.GLJPanel;

public class Gl_SimpleCube extends GLJPanel implements GLEventListener {

    private GL gl;
    private GLUT glut;

    public Gl_SimpleCube() {

        GLJPanel glc = new GLJPanel();
        glc.addGLEventListener(this);

        this.add(glc);

    }

    public void init(GLAutoDrawable drawable) {
        gl = drawable.getGL();
        glut = new GLUT();

        gl.glClearColor(0.5f, 0.5f, 0.5f, 0.0f);
    }

    public void reshape(GLAutoDrawable drawable,
                        int x, int y,
                        int width, int height) {
        float ratio = (float)height / (float)width;

        gl.glViewport(0, 0, width, height);

        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,
                     5.0f, 40.0f);

        gl.glMatrixMode(GL.GL_MODELVIEW);
        gl.glLoadIdentity();
        gl.glTranslatef(0.0f, 0.0f, -20.0f);
    }

    public void display(GLAutoDrawable drawable) {
        gl.glClear(GL.GL_COLOR_BUFFER_BIT);

        // 線画の立方体を描画
        glut.glutWireCube(2.0f);
    }

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

Fx_SimpleCube.fx
package fx_simpleCube;

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

import javax.media.opengl.GLJPanel;
import fx_simpleCube.Gl_SimpleCube;
import javafx.ext.swing.SwingComponent;


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

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

Stage {
    title : "SimpleCube"
    scene: Scene {
        width: swingComp.width
        height: swingComp.height
        content: [
            swingComp
        ]
    }
}

実行結果
実行結果