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) {
}
}