Jalani Dan Nikmati Hidup Dengan Senyum Dan Penuh Tanggung Jawab Dan Tetap Mencari Celah Untuk Memperbaiki Kualitas Hidup Yang Lebih Baik Dari Hari Ini Dan Buatlah Hidup Yang Cuma Sekali Ini Bermakna Buatmu Dan Buat Orang Sekitarmu

Friday, May 17, 2013

Menggambar Petir Dengan Java Dan Open GL

selamat pagi pemirsa....
jumpa lagi nih...

sebenarnya yang saya share ini merupakan tugas saya di mata kuliah Pemrograman Komputer Grafis tentang membuat garis dengan algoritma DDA yang membuat saya dan teman teman pusing 20 keliling,hehehe

tugas ini saya buat dengan java netbeans dengan plugin JOGL.Udah ngerti belum JOGL ? kalau belum coba baca postingan saya sebelumnya tentang JOGL Di Sini

oke deh langsung aja saya tulis kodingnya ya....yang sabar kalau mau nyontek soalnya kodingnya lumayan panjang dan saya pakai algoritma DDA.Berikut kodenya :


package org.yourorghere;

import com.sun.opengl.util.Animator;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;



/**
 * PKG.java <BR>
 * author:Nur Hidayatullah
 *
 *
 */
public class DDA implements GLEventListener {
    int steps;
            int x0=1;
            int x1=15;
            int y0=1;
            int y1=15;
            int x_tambah;int y_tambah;
            int x,y;
    public static void main(String[] args) {
        Frame frame = new Frame("DDA");
        GLCanvas canvas = new GLCanvas();
        canvas.addGLEventListener(new DDA());
        frame.add(canvas);
        frame.setSize(640, 480);
        final Animator animator = new Animator(canvas);
        frame.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                // Run this on another thread than the AWT event queue to
                // make sure the call to Animator.stop() completes before
                // exiting
                new Thread(new Runnable() {

                    public void run() {
                        animator.stop();
                        System.exit(0);
                    }
                }).start();
            }
        });
        // Center frame
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        animator.start();
    }

    public void init(GLAutoDrawable drawable) {
        // Use debug pipeline
        // drawable.setGL(new DebugGL(drawable.getGL()));

        GL gl = drawable.getGL();
        System.err.println("INIT GL IS: " + gl.getClass().getName());

        // Enable VSync
        gl.setSwapInterval(1);

        // Setup the drawing area and shading mode
        gl.glClearColor(0.0f, 0.0f, 0.0f, 8.0f);
        gl.glShadeModel(GL.GL_SMOOTH); // try setting this to GL_FLAT and see what happens.
    }

    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
        GL gl = drawable.getGL();
        GLU glu = new GLU();

        if (height <= 0) { // avoid a divide by zero error!
       
            height = 1;
        }
        final float h = (float) width / (float) height;
        gl.glViewport(10, 10, width, height);
        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();
        glu.gluPerspective(11000.0f, h, 1.0, 100.0);
        gl.glMatrixMode(GL.GL_MODELVIEW);
        gl.glLoadIdentity();
    }

    public void display(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();

        // Clear the drawing area
        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
        // Reset the current matrix to the "identity"
        gl.glLoadIdentity();

        // Move the "drawing cursor" around
        gl.glTranslatef(-1.5f, 0.0f, -6.0f);
       gl.glPointSize(12.0f);
           

           DDA p=new DDA();
           int dx= x1-x0;
          int dy= y1-y0;
        if (Math.abs(dx) > Math.abs(dy)){
        steps = Math.abs(dx);
        }
        else{
        steps = Math.abs(dy);
        }  
        x_tambah = dx / steps;
        y_tambah = dy / steps;
                x=x0;
                y=y0;
         
        gl.glBegin(GL.GL_POINTS);
            gl.glColor3f(0.0f, 0.0f, 1.0f);  
            gl.glVertex2f(x0,y0);
          gl.glColor3f(0.0f, 0.0f, 1.0f);  
            gl.glVertex2f(x1,y1);
           

           for (int k=2; k<= steps ;k++){
            x += x_tambah;
            y += y_tambah;
             gl.glBegin(GL.GL_POINTS);
           gl.glColor3f(0.0f, 0.0f, 1.0f);  
            gl.glVertex2f(x,y);
            gl.glColor3f(0.0f, 0.0f, 1.0f);  
            gl.glVertex2f(x0,y0+y);
            gl.glColor3f(0.0f, 0.0f, 1.0f);  
            gl.glVertex2f(x0-x,y1-y);
            gl.glColor3f(0.0f, 0.0f, 1.0f);  
            gl.glVertex2f(x1+1,y1+5);
           gl.glColor3f(0.0f, 0.0f, 1.0f);  
            gl.glVertex2f(x1-x,y1+5);
            gl.glColor3f(0.0f, 0.0f, 1.0f);  
            gl.glVertex2f(x0-3,y1+5);
          gl.glColor3f(0.0f, 0.0f, 1.0f);  
            gl.glVertex2f(x0-4-x,y1+5);
           
        gl.glEnd();
        gl.glFlush();
           }
    }
   

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


Gimana ? pusing gak bacanya ?hehehe

kalau di running jadinya seperti ini






Kalau mau nyoba merubah source kodenya bisa di download Di Sini

sekian dulu ya....kalau ada uneg uneg bisa koment di bawah artikel ini.Terima Kasih

2 comments:

  1. blogmu gak beres iki pak,, file gak iso didownload..

    ReplyDelete
  2. modem entek pulsane iku bos...iso ae nek ngeles

    ReplyDelete