Instalasi Java OpenGL di Linux


JOGL merupakan paket Java yang menyediakan penggabungan library untuk OpenGL Java Virtual Machine. Hal itu mengijinkan programmer komputer grafik untuk menggunakan object-oriented tools pada Java dengan hardware akselerasi grafik 2D dan 3D.

Pertama-tama yang harus anda perhatikan yaitu pastikan anda sudah menginstal Java Development Kit pada sistem anda.

Langkah instalasi JOGL di Linux (instalation for dummy) :

  1. Download JOGL versi terbaru di jogl.dev.net atau versi jogl yang saya gunakan  jogl-1.1.1-linux-i586.zip. Saya asumsikan anda menyimpan file tersebut di home direktori.
  2. Selanjutnya anda harus menjadi superuser atau dengan cara :
    $su atau $sudo su
    Sekarang anda harus membuat direktori di /usr/lib/jogl.
  3. Nah untuk melakukannya ketik
    linux-eqjw:~ # mkdir /usr/lib/jogl
    Pindahkan file zip tersebut kedalam direktori atau folder yang baru dibuat:
    linux-eqjw:~ #mv ~/jogl-<versi jogl>.zip /usr/lib/jogl/
  4. Ekstrak file tersebut :
    linux-eqjw:~ #cd /usr/lib/jogl
    linux-eqjw:~ #unzip jogl-<versi jogl>

Nah sekarang saatnya konfigurasi sistem agar saat pemanggilan perintah javac bisa mengenali library yang disediakan jogl. Untuk melakukannya anda tinggal menambahkan perintah berikut di .bashrc atau .bash_profile(di openSUSE) di home direktori anda(untuk bisa mengakses file ini anda harus menjadi root).

LD_LIBARY_PATH=/usr/local/pgsql/lib:/usr/lib/jogl/jogl-1.1.1-linux-i586/lib
CLASSPATH=.:/usr/lib/jogl/jogl-1.1.1-linux-i586/lib/gluegen-rt.jar:/usr/lib/jogl/jogl-1.1.1-linux-i586/lib/jogl.jar
export LD_LIBRARY_PATH
export CLASSPATH

Jika LD_LIBARY_PATH dan CLASSPATH tinggal menambahkan dengan pemisah ‘:’ seperti diatas.
Untuk mengedit nilai di .bashrc atau .bash_profile anda bisa menggunakan perintah vi .bash_profile

Untuk mencoba apakah bisa berfungsi konfigurasi yang telah anda lakukan, berikut adalah contoh program yang saya ambil dari java.sun.com

   //JOGLRotatingCube.java
   import net.java.games.jogl.GLCanvas;
   import net.java.games.jogl.GLCapabilities;
   import net.java.games.jogl.GLDrawableFactory;
   import net.java.games.jogl.Animator;
   import net.java.games.jogl.GL;
   import net.java.games.jogl.GLEventListener;
   import net.java.games.jogl.GLDrawable;

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

   public class JOGLRotatingCube {

     private static final int SIZE = 160;

     private static float angle = 0;

     JOGLRotatingCube() {
       GLCanvas canvas = getGLCanvas();
       canvas.addGLEventListener(new RotatingCubeListener());
       Animator anim = new Animator(canvas);
       addCanvasToFrame(canvas, anim);
       anim.start();
     }

     private void addCanvasToFrame(
      GLCanvas canvas, final Animator anim) {
       Frame f = new Frame("JOGL Rotating Half - Cube");
       f.setSize(600, 400);
       f.add(canvas);
       f.setVisible(true);
       f.addWindowListener(new WindowAdapter() {
           public void windowClosing(WindowEvent e) {
             anim.stop();
             System.exit(0);
           }
         });
     }

     private GLCanvas getGLCanvas() {
       GLCapabilities capabilities = new GLCapabilities();
       return GLDrawableFactory.getFactory().
                             createGLCanvas(capabilities);
     }

     public static void main(String[] args) {
       new JOGLRotatingCube();
     }

     private void drawCenteredCube(GL gl) {
       gl.glColor4f(1, 0, 0, 0);
       drawSquareFace(gl);
       gl.glColor4f(1, 1, 0, 0);
       gl.glRotatef(90, 1, 0, 0);
       drawSquareFace(gl);
       gl.glColor4f(0, 0, 1, 0);
       gl.glRotatef(90, 0, 1, 0);
       drawSquareFace(gl);
       gl.glColor3f(0.0f, 0.0f, 0.0f);
     }

     private void drawSquareFace(GL gl) {
       gl.glBegin(GL.GL_QUADS);
       gl.glTexCoord2f(0, 0);
       gl.glVertex3f(-SIZE / 2, -SIZE / 2, SIZE / 2);
       gl.glTexCoord2f(0, 1);
       gl.glVertex3f(-SIZE / 2, SIZE / 2, SIZE / 2);
       gl.glTexCoord2f(1, 1);
       gl.glVertex3f(SIZE / 2, SIZE / 2, SIZE / 2);
       gl.glTexCoord2f(1, 0);
       gl.glVertex3f(SIZE / 2, -SIZE / 2, SIZE / 2);
       gl.glEnd();
     }

     class RotatingCubeListener implements GLEventListener {

       public void init(GLDrawable drawable) {
         GL gl = drawable.getGL();
         gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); //erasing color
         gl.glColor3f(0.0f, 0.0f, 0.0f); // drawing color
       }

       public void display(GLDrawable drawable) {
         GL gl = drawable.getGL();
         gl.glClear(GL.GL_COLOR_BUFFER_BIT);

         angle++;
         gl.glMatrixMode(GL.GL_MODELVIEW);
         gl.glLoadIdentity();
         gl.glRotatef(-80, 1, 1, 0);
         gl.glRotatef(angle /16, 1, -1, 1);
         drawCenteredCube(gl);
       }

       public void reshape(GLDrawable drawable,
                           int x,
                           int y,
                           int width,
                           int height) {
         GL gl = drawable.getGL();
         gl.glViewport(0, 0, width, height);
         gl.glMatrixMode(GL.GL_PROJECTION);
         gl.glLoadIdentity();
         gl.glOrtho(-width, width, -height, height, -SIZE, SIZE);
       }

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

Kompile dan jalankan JOGLRotatingCube, maka jika berhasil anda akan melihat kubus yang berotasi seperti gambar berikut.

Nah, sekian dulu semoga bermanfaat.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s