Jumat, 06 Januari 2012

OpenGL di JAVA dengan Library LWJGL

Selamat pagi.. (*saya bikin ini pas pagi hari soalnya ^^)...

Akhirnya setelah sekian lama muncul post baru juga, ini mumpung lagi nganggur dan kecewa, jadi bisa posting lagi di sini. Langsung saja ke topik!! Kali ini kita akan belajar teknologi 3D di Java, di sini saya memakai Library LWJGL. LWJGL (Lightweight Java Game Library) adalah sebuah library untuk graphics 3D di atas plathform Java yang berdasarkan pada OpenGL. Walaupun berjalan di atas java, performa yang dihasilkan tidak lemot kok,, hampir sama dengan OpenGL dengan C++ atau lainnya..., ini saya kasih screen shoot contoh nya


Untuk mengembangkan aplikasi dengan library ini pertama harus install dan setting dulu library LWJG, tutorial lengkap buat setting nya ada di halaman installation di website LWJGL, tapi di sini saya jelaskan instalasi untuk memakai Netbeans IDE.

1. Download Dulu Library JWGL dari Alamat sourceforge ini (*lihat gambar di bawah) di situ ada 4 file, untuk tutorial ini silakan download 3 file yang paling atas.


3. Kalau sudah ter-download, buat folder LWJGL di drive C:/ ato mana saja yang penting mudah diingat, kemudian ekstrak file lwjgl-2.8.2.zip dan lwjgl-source-2.8.2.zip ke dalamnya., sehingga struktur foldernya menjadi seperti pada gambar:

4. Selanjutnya buka Netbeans IDE. dan setting Library lewat menu Tools --> Libraries


5. Pada jendela Libraries, buat Class Library baru, misal dengan nama LWJGL, 

6. Setelah library kosongan terbentuk, pada Tab Classpath, klik tombol Add Jar/Folder dan cari pada folder jar hasil ekstrak tadi misal C:/LWJGL/lwjgl-2.8.2/jar, tambahkan file jinput.jar, lwjgl.jar, dan lwjgl_util.jar (tekan Ctrl untuk memilih 3 file tersebut sekaligus)

7. Kemuadian pada Tab Sources, klik  Add Jar/Folder dan cari pada folder hasil ekstrak yang C:/LWJGL/ lwjgl-source-2.8.2/src/ tambahkan Folder generated dan java. 

8. Dan terakhir pada Tab Javadoc tambahkan file lwjgl-docs-2.8.2.zip cari pada folder C:/LWJGL/, jika semua sudah ditambahkan. Klik Ok untuk mulai membuat project baru dengan library LWJGL ini.


Setelah library LWJG di Netbeans sudah terbentuk, silakan membuat project baru (File --> New Project --> Java --> Java Application) beri nama misal BelajarLWJGL, (kosongkan centang Create Main Class)  --> Finish

Sebelum memulai coding, tambahkan dahulu Library pada project yang telah kita buat  (Klik Kanan [Nama Project] --> Properties --> Libraries), pada tab Compile, klik Add Library, cari library LWJGL yang sebelumnya telah kita buat.


Kemudian setting dulu path native library LWJGL pada Property project. (Klik Kanan [Nama Project] --> Properties --> Run) tambahkan parameter pada baris VM Options : 

-Djava.library.path="C:/LWJGL/lwjgl-2.8.2/lwjgl-2.8.2/native/windows"


Parameter tersebut untuk memberitahu Netbeans Letak Eksternal Native library yang dipakai oleh LWJGL, cek/eksplore pada folder tersebut untuk memastikan file dll ada. Untuk selain windows, folder native library yang dipakai menyesuaikan.


   
Project terbentuk dan buatlah class baru, misal dengan nama LWJGLMain (Klik Kanan [Nama Project] --> New --> Java Class). Untuk sekedar ngetes apakah library sudah bisa digunakan, bisa copas kode berikut, biar cepet:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author ffred
 */

import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.util.glu.GLU.*;
 
import org.lwjgl.LWJGLException;
import org.lwjgl.Sys;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
 
public class LWJGLMain {
    public static final int DISPLAY_HEIGHT = 480;
    public static final int DISPLAY_WIDTH = 640;
    
    private float rtri;
    
    private long lastTime;
    private int fps;
        
    public static void main(String[] args) {
        LWJGLMain main = null;
        try {
            main = new LWJGLMain();
            main.create();
            main.run();
        }catch(Exception e){}
        
        if(main != null) {
            main.destroy();
        }
    }
    
    public LWJGLMain() {
        //tambahkan inisiasi sesukanya
    }
    
    public void create() throws LWJGLException {
        Display.setDisplayMode(new DisplayMode(DISPLAY_WIDTH, DISPLAY_HEIGHT));
        Display.setTitle("Belajar LWJGL");
        Display.setFullscreen(false);
        Display.create();
        
        initGL();
        resizeGL();
    }
    
    public void destroy() {
        Display.destroy();
    }
    
    public void initGL() {
        glShadeModel(GL_SMOOTH);                // Enables Smooth Shading
 glClearColor(0.0f, 0.0f, 0.0f, 0.0f);   // Black Background
        glClearDepth(1.0f);                     // Depth Buffer Setup 
        glEnable(GL_DEPTH_TEST);                // Enables Depth Testing 
        glDepthFunc(GL_LEQUAL);                 // The Type Of Depth Test To Do
        
        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);          // Really Nice Perspective Calculations
        
        lastTime = Sys.getTime();
    }
    
    public void resizeGL() {
        glViewport(0,0,DISPLAY_WIDTH,DISPLAY_HEIGHT);
        
        glMatrixMode(GL_PROJECTION);    // Select The Projection Matrix 
        glLoadIdentity();               // Reset The Projection Matrix 

        // Calculate The Aspect Ratio Of The Window 
        gluPerspective(45.0f,(float)DISPLAY_WIDTH/(float)DISPLAY_HEIGHT,0.1f,100.0f); 

        glMatrixMode(GL_MODELVIEW);     // Select The Modelview Matrix 
        glLoadIdentity();               // Reset The Modelview Matrix
    }
 
    public void render() {
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();
        
        glTranslated(0.0f,0.0f,-5.0f);      // Translasi piramid ke belakang
        glRotatef(rtri,0.0f,1.0f,0.0f);     // Rotate The Pyramid On It's Y Axis
        
        glBegin(GL_TRIANGLES);              // Start Drawing The Pyramid
        glColor3f(1.0f,0.0f,0.0f);          // Red
        glVertex3f( 0.0f, 1.0f, 0.0f);      // Top Of Triangle (Front)
        glColor3f(0.0f,1.0f,0.0f);          // Green
        glVertex3f(-1.0f,-1.0f, 1.0f);      // Left Of Triangle (Front)
        glColor3f(0.0f,0.0f,1.0f);          // Blue
        glVertex3f( 1.0f,-1.0f, 1.0f);      // Right Of Triangle (Front)
        
        glColor3f(1.0f,0.0f,0.0f);          // Red
        glVertex3f( 0.0f, 1.0f, 0.0f);      // Top Of Triangle (Right)
        glColor3f(0.0f,0.0f,1.0f);          // Blue
        glVertex3f( 1.0f,-1.0f, 1.0f);      // Left Of Triangle (Right)
        glColor3f(0.0f,1.0f,0.0f);          // Green
        glVertex3f( 1.0f,-1.0f, -1.0f);     // Right Of Triangle (Right)
        
        glColor3f(1.0f,0.0f,0.0f);          // Red
        glVertex3f( 0.0f, 1.0f, 0.0f);      // Top Of Triangle (Back)
        glColor3f(0.0f,1.0f,0.0f);          // Green
        glVertex3f( 1.0f,-1.0f, -1.0f);     // Left Of Triangle (Back)
        glColor3f(0.0f,0.0f,1.0f);          // Blue
        glVertex3f(-1.0f,-1.0f, -1.0f);     // Right Of Triangle (Back)

        glColor3f(1.0f,0.0f,0.0f);          // Red
        glVertex3f( 0.0f, 1.0f, 0.0f);      // Top Of Triangle (Left)
        glColor3f(0.0f,0.0f,1.0f);          // Blue
        glVertex3f(-1.0f,-1.0f,-1.0f);      // Left Of Triangle (Left)
        glColor3f(0.0f,1.0f,0.0f);          // Green
        glVertex3f(-1.0f,-1.0f, 1.0f);      // Right Of Triangle (Left)
        glEnd();                            // Done Drawing The Pyramid
        
        rtri+=0.2f;
    }
 
  public void run() {
        while(!Display.isCloseRequested() && !Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) {
            if(Display.isVisible()) {
                update();
                render();
            }
            else {
                if(Display.isDirty()) {
                    render();
                }
                try {
                    Thread.sleep(100);
                }
                catch(InterruptedException ex) {
                }
            }
            Display.update();
            Display.sync(60); //fps --> 60
        }
    }
    
    public void update() {
        updateFPS();
    }
    
    public void updateFPS(){
        if(Sys.getTime()-lastTime>1000){
            Display.setTitle("Belajar LWJGL fps: "+fps);
            fps = 0;
            lastTime = Sys.getTime();
        }
        fps++;
    }
}


Silakan klik Run (Tekan F6). dan jika berhasil maka akan muncul!

4 komentar:

dhartodar mengatakan...

Terima Kasih atas tutorial. Sangat membantu dan mudah diikuti :)

ffredie mengatakan...

Terimakasih juga untuk kunjungannya. Salam kenal..

Unknown mengatakan...

mas mohon maaf sebelumnya saya ucapkan terima kasih,
saya menggunakan NB 7.0 dan ini semua panambhaan file jar di library udah semua dan maksud dari istilah VM yang ini apa

"-Djava.library.path="C:/LWJGL/lwjgl-2.8.2/lwjgl-2.8.2/native/windows"

apakah harus membuat peth library di folder c atau gimana, sebab di project saya muncul begini run:
Error: Could not find or load main class C:\LWJGL\lwjgl-2.8.2\native
Java Result: 1

BUILD SUCCESSFUL (total time: 0 seconds)

mohon bantuannya, dan sekali lagi terima kasih.

Malma mengatakan...

Kalo untuk eclipse ada tutorialnya tidak kak? Soalnya saya pakai eclipse.