27 Oct 2014

Membuat Segitiga 3D dengan OpenGL Java Neatbeans



A.  Latar Belakang Grafkom

Grafik Komputer adalah suatu ilmu komputer yang berkaitan dengan pembuatan dan manipulasi gambar dengan cara digital. Bentuk sederhana nya ada grafik Komputer 2D dan berkembang menjadi grafik komputer 3D.
Pengolahan citra ialah salah satu cabang ilmu informatika, pengolahan citra suatu usaha untuk melakukan transformasi citra atau gambar menjadi citra lain dengan suatu teknik tertentu.

      Jadi menurut saya Grafik Komputer dan Pengolahan Citra, salah satu ilmu komputer yang menjelaskan tentang manipulasi gambar dengan cara digital, grafik 2D dan 3D, juga mengolah suatu citra atau gambar, menjadi citra lain dengan teknik tertentu.
A.  Manfaat
Contoh Grafik Komputer :
1.    Hiburan , seperti film animasi dengan grafik komputer yang bagus.
2.    Pendidikan, permainan untuk pendidikan mengunakan grafik computer yang menarik di lihat.
3.    karya seni, Hasil dapat berupa kartun, animasi, logo, lukisan abstrak, dsketsa dan lain sebagainya.

B.  Tujuan
1.    Menyelesaikan Ujian Akhir Semester matakuliah Grafika Komputer semester 2.
2.    Mahasiswa mampu mengimplementasikan fungsi dari project tersebut dengan menggunakan bahasa pemrograman Java Neatbeans.












C.  Tentang Program
Penulis membuat Segitiga 3D dengan OpenGL menggunakan aplikasi Java Neatbeans, dalam program ini penulis menggunakan OpenGL yang mana dalam program ini user harus menginputkan sofware openGl-nya agar nantinya program bisa dijalankan. Atau bisa juga menggunakan software 3D dengan menambahkan di libraries-nya.

D.  Source Code Program
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;
import java.awt.color.*;



/**
 * SimpleJOGL.java <BR>
 * author: Brian Paul (converted to Java by Ron Cemer and Sven Goethel) <P>
 *
 * This version is equal to Brian Paul's version 1.2 1999/10/21
 */
public class SimpleJOGL implements GLEventListener {

    public static void main(String[] args) {
        Frame frame = new Frame("SAHRUL GUNAWAN 130403010045");
        GLCanvas canvas = new GLCanvas();

        canvas.addGLEventListener(new SimpleJOGL());
        frame.add(canvas);
        frame.setSize(500, 350);
        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();
    }
    private float r;

    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, 0.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(0, 0, width, height);
        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();
        glu.gluPerspective(45.0f, h, 1.0, 20.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, -5.0f);

        // Drawing Using Triangles
       /*gl.glBegin(GL.GL_TRIANGLES);
            gl.glColor3f(1.0f, 0.0f, 0.0f);    // Set the current drawing color to red
            gl.glVertex3f(0.0f, 1.0f, 0.0f);   // Top
            gl.glColor3f(0.0f, 1.0f, 0.0f);    // Set the current drawing color to green
            gl.glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
            gl.glColor3f(0.0f, 0.0f, 1.0f);    // Set the current drawing color to blue
            gl.glVertex3f(1.0f, -1.0f, 0.0f);  // Bottom Right
        // Finished Drawing The Triangle
        gl.glEnd();

        // Move the "drawing cursor" to another position
        gl.glTranslatef(3.0f, 0.0f, 0.0f);
        // Draw A Quad
        gl.glBegin(GL.GL_QUADS);
            gl.glColor3f(0.5f, 0.5f, 1.0f);    // Set the current drawing color to light blue
            gl.glVertex3f(-1.0f, 1.0f, 0.0f);  // Top Left
            gl.glVertex3f(1.0f, 1.0f, 0.0f);   // Top Right
            gl.glVertex3f(1.0f, -1.0f, 0.0f);  // Bottom Right
            gl.glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
        // Done Drawing The Quad
        gl.glEnd();*/
       
       
gl.glRotatef(r,0.0f, 0.0f, 0.1f);
   
gl.glBegin (GL.GL_QUADS);
gl.glColor3f (0.0f, 0.1f, 0.0f);
gl.glVertex3f (0.0f, 0.5f, 0.0f);
gl.glVertex3f (0.4f, 0.5f, 0.0f);
gl.glVertex3f (0.4f, 0.5f, 0.4f);
gl.glVertex3f (0.0f, 0.5f, 0.4f);
gl.glEnd();


gl.glBegin (GL.GL_TRIANGLES) ;
gl.glColor3f(1.0f, 0.0f, 0.0f); //r
gl.glVertex3f (0.0f, 0.5f, 0.0f);
gl.glColor3f(0.0f, 0.0f, 1.0f); //b
gl.glVertex3f (0.4f, 0.5f, 0.0f);
gl.glColor3f(0.0f, 1.0f, 0.0f); //g
gl.glVertex3f (0.2f, 0.0f, 0.2f);


gl.glColor3f(1.0f, 0.0f, 0.0f); //r
gl.glVertex3f (0.4f, 0.5f, 0.0f);
gl.glColor3f(0.0f, 0.0f, 1.0f); //b
gl.glVertex3f (0.4f, 0.5f, 0.4f);
gl.glColor3f(0.0f, 1.0f, 0.0f); //g
gl.glVertex3f (0.2f, 0.0f, 0.2f);

gl.glColor3f(1.0f, 0.0f, 0.0f); //r
gl.glVertex3f (0.4f, 0.5f, 0.4f);
gl.glColor3f(0.0f, 0.0f, 1.0f); //b
gl.glVertex3f (0.0f, 0.5f, 0.4f);
gl.glColor3f(0.0f, 1.0f, 0.0f); //g
gl.glVertex3f (0.2f, 0.0f, 0.2f);

gl.glColor3f(1.0f, 0.0f, 0.0f); //r
gl.glVertex3f (0.0f, 0.5f, 0.4f);
gl.glColor3f(0.0f, 0.0f, 1.0f); //b
gl.glVertex3f (0.0f, 0.5f, 0.0f);
gl.glColor3f(0.0f, 1.0f, 0.0f); //g
gl.glVertex3f (0.2f, 0.0f,0.2f);

gl.glEnd ();
r++;
   


        // Flush all drawing operations to the graphics card
        gl.glFlush();
    }

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

- Tampilan Setelah Di Run