Sabtu, 30 Juni 2012

Tugas grafika komputer.


Membangun Visualisasi 3D dari tokoh Kartun Spongebob Square Pants.
 
 
Teknologi gambar, grafis dan visualisasi telah mengalami perkembangan yang cepat. Keperluan visualisasi penggambaran objek bentuk 3D secara visual sering dibutuhkan Kecenderungan masyarakat untuk lebih memilih visual yang lebih memanjakan mata mereka telah mendorong teknologi visualisasi ke era 3D. Visualisasi ini digunakan untuk mempresentasikan bentuk suatu objek dengan pencitraan yang lebih menarik, seperti dalam segi pencahayaan, gerakan dan lain-lain.
Sekarang ini masyarakat lebih memilih untuk melihat animasi dalam bentuk 3D karena lebih terlihat nyata. Untuk itu Kami buat tokoh kartun Spongebob Square Pants dalam bentuk 3D yang bertujuan untuk  melihat visualisasi yang lebih menarik serta dapat berinteraksi dengan objek tersebut secara virtual. Objek benda atau orang beserta atribut-atributnya dapat dibuat sedetail mungkin dengan menggunakan aplikasi opengl.
Permasalahan yang timbul adalah bagaimana membangun visualisasi 3D dari tokoh kartun Spongebob Square Pants dengan atribut-atribut yang dimilikinya dan membuat interaksinya dengan objek tersebut.

Source code
            Source code yang telah dibuat adalah sebagai berikut:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.mikeGila;

import com.sun.opengl.util.GLUT;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;

/**
 *
 * @author mikegila
 */
public class isiGLPanel implements GLEventListener {

    private GLUT glut;
    //textur
 //   private int[] textures = new int[3];//nyimpen 3 tekstur
    //lighting
    private boolean lightingEnabled;    // Lighting ON/OFF
    private float[] lightAmbient = {0.5f, 0.5f, 0.0f, 1.0f};
    private float[] lightDiffuse = {1.0f, 1.0f, 1.0f, 1.0f};
    //private float[] lightPosition = {0.0f, 0.0f, 2.0f, 1.0f};
    private float[] lightPosition = {4.0f, 4.0f, 8.0f, 1.0f};
   
    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());
//mike
        //textures :: http://i.istockimg.com/file_thumbview_approve/8568236/2/stock-photo-8568236-sponge-texture.jpg
 /*       gl.glClearDepth(1.0f);                      // Depth Buffer Setup
        gl.glEnable(GL.GL_DEPTH_TEST);              // Enables Depth Testing
        gl.glDepthFunc(GL.GL_LEQUAL);               // The Type Of Depth Testing To Do
        // Really Nice Perspective Calculations
        gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); 
        gl.glEnable(GL.GL_TEXTURE_2D);  */
/*
        TextureReader.Texture texture = null;
        try {
            texture = TextureReader.readTexture("demos/data/images/crate.png");
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
 */
   /*    
       //lighting
        gl.glLightfv(GL.GL_LIGHT1, GL.GL_AMBIENT, this.lightAmbient, 0);
        gl.glLightfv(GL.GL_LIGHT1, GL.GL_DIFFUSE, this.lightDiffuse, 0);
        gl.glLightfv(GL.GL_LIGHT1, GL.GL_POSITION, this.lightPosition, 0);
        gl.glEnable(GL.GL_LIGHT1);
        gl.glEnable(GL.GL_LIGHTING);
        this.lightingEnabled = true;
  */     
        glut = new GLUT();
        // 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();
        GLU glu = new GLU();
        GLUT glut = new GLUT();
        //
        gl.glClear(GL.GL_COLOR_BUFFER_BIT);// | GL.GL_DEPTH_BUFFER_BIT);
        gl.glColor3d(1.0, 1.0, 0.0);
     //   gl.glLoadIdentity();
        /*
         * clear the matrix
         */
   
        /*
         * viewing transformation eyex,y,z, centerx,y,z, upx,y,z
         */        
        glu.gluLookAt(2.0,0.0,4.0, 0.0,0.0,0.0, 0.0,1.0,1.0);
  //kepala
        gl.glPushMatrix();//save current matrix
        gl.glScalef(1.0f, 1.0f, 0.4f); //untuk mengubah ukuran tebal tipisnya benda
        glut.glutWireCube(1.0f);//benda kubus dengan satuan 1      
        gl.glPopMatrix();//pop biar reset
  //baju 
        gl.glPushMatrix();       
        gl.glTranslatef(0.0f, -0.58f, 0.0f);//mentranslate titik koordinat atas bawah kiri kanan dsb
        gl.glScalef(1.0f, 0.15f, 0.4f);
        gl.glColor3d(1.0, 1.0, 1.0);
        glut.glutWireCube(1.0f);
        gl.glPopMatrix();
  //celana
        gl.glPushMatrix();
        gl.glTranslatef(0.0f, -0.73f, 0.0f);// -0.58-0.15=-0.73
        gl.glScalef(1.0f, 0.15f, 0.4f);      
        gl.glColor3d(1.0, 0.0, 0.0);
        glut.glutWireCube(1.0f);
        gl.glPopMatrix();
   //celana kiri
        gl.glPushMatrix();           
        gl.glTranslatef(-0.2f, -0.84f, 0.0f);// -0.73-0.15=-0.88
        gl.glRotatef(90, 1.0f, 0.0f, 0.0f);
        gl.glColor3d(1.0, 0.0, 0.0);
        glut.glutWireCylinder(0.1, 0.05, 10, 10);
        gl.glPopMatrix();
   //celanan kanan
        gl.glPushMatrix();           
        gl.glTranslatef(0.2f, -0.84f, 0.0f);// -0.73-0.15=-0.88
        gl.glRotatef(90, 1.0f, 0.0f, 0.0f);
        gl.glColor3d(1.0, 0.0, 0.0);
        glut.glutWireCylinder(0.1, 0.05, 10, 10);
        gl.glPopMatrix();
   //kaki kiri
        gl.glPushMatrix();           
        gl.glTranslatef(-0.2f, -0.84f, 0.0f);// -0.73-0.15=-0.88
        gl.glRotatef(90, 1.0f, 0.0f, 0.0f);
        gl.glColor3d(1.0, 1.0, 0.0);
        glut.glutWireCylinder(0.02, 0.5, 5, 5);
        gl.glPopMatrix();
  //kakikanan
        gl.glPushMatrix();           
        gl.glTranslatef(0.2f, -0.84f, 0.0f);// -0.73-0.15=-0.88
        gl.glRotatef(90, 1.0f, 0.0f, 0.0f);
        gl.glColor3d(1.0, 1.0, 0.0);
        glut.glutWireCylinder(0.02, 0.5, 5, 5);
        gl.glPopMatrix();
  //lengan baju kiri
        gl.glPushMatrix();           
        gl.glTranslatef(-0.5f, -0.2f, 0.0f);
        gl.glRotatef(90, 0.0f, -1.0f, 0.0f);
        gl.glColor3d(1.0, 1.0, 1.0);
        glut.glutWireCone(0.1, 0.3, 10, 10);
        gl.glPopMatrix();
  //lengan baju kanan
        gl.glPushMatrix();           
        gl.glTranslatef(0.5f, -0.2f, 0.0f);
        gl.glRotatef(90, 0.0f, 1.0f, 0.0f);
        gl.glColor3d(1.0, 1.0, 1.0);
        glut.glutWireCone(0.1, 0.3, 10, 10);
        gl.glPopMatrix();
  //lengan kiri
        gl.glPushMatrix();           
        gl.glTranslatef(-0.5f, -0.2f, 0.0f);
        gl.glRotatef(90, 0.0f, -1.0f, 0.0f);
        gl.glColor3d(1.0, 1.0, 0.0);
        glut.glutWireCylinder(0.02, 1, 5, 5);
        gl.glPopMatrix(); 
  //lengan kanan
        gl.glPushMatrix();           
        gl.glTranslatef(0.5f, -0.2f, 0.0f);
        gl.glRotatef(90, 0.0f, 1.0f, 0.0f);
        gl.glColor3d(1.0, 1.0, 0.0);
        glut.glutWireCylinder(0.02, 1, 5, 5);
        gl.glPopMatrix();       
  //mata kiri
        gl.glPushMatrix();           
        gl.glTranslatef(-0.2f, 0.0f, 0.2f);
        gl.glScalef(1.0f, 1.0f, 0.4f);
        gl.glColor3d(0.5, 0.7, 1.0);
        glut.glutWireSphere(0.2, 10, 10);
        gl.glPopMatrix();
  //mata kanan
        gl.glPushMatrix();           
        gl.glTranslatef(0.2f, 0.0f, 0.2f);
        gl.glScalef(1.0f, 1.0f, 0.4f);
        gl.glColor3d(0.5, 0.7, 1.0);
        glut.glutWireSphere(0.2, 10, 10);
        gl.glPopMatrix();
   //hidung
        gl.glPushMatrix();           
        gl.glTranslatef(0.0f, -0.15f, 0.26f);
        gl.glScalef(1.0f, 1.0f, 1.5f);
        gl.glColor3d(1.0, 1.0, 0.0);
        glut.glutWireSphere(0.06, 10, 10);
        gl.glPopMatrix();
   //mulut
        gl.glPushMatrix();
        gl.glTranslatef(0.0f, -0.35f, 0.2f);
        gl.glScalef(3.5f, 1.0f, 0.0f);
        gl.glColor3d(1.0, 0.0, 0.0);
        glut.glutWireSphere(0.06, 10, 10);
        gl.glPopMatrix();
   //gigi kiri
        gl.glPushMatrix();
        gl.glTranslatef(-0.04f, -0.34f, 0.2f);
        gl.glScalef(0.8f, 1.1f, 0.5f);
        gl.glColor3d(1.0, 1.0, 1.0);
        glut.glutWireCube(0.08f);
        gl.glPopMatrix();
    //gigi kanan   
        gl.glPushMatrix();
        gl.glTranslatef(0.04f, -0.34f, 0.2f);
        gl.glScalef(0.8f, 1.1f, 0.5f);
        gl.glColor3d(1.0, 1.0, 1.0);
        glut.glutWireCube(0.08f);
        gl.glPopMatrix(); 
        gl.glFlush();

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