PENDAHULUAN
1. Latar Belakang
Penggambaran objek bentuk 3D secara visual sering dibutuhkan untuk
keperluan visualisasi penggambaran suatu objek dengan atributnya. Visualisasi ini
digunakan untuk mempresentasikan bentuk suatu objek dengan pewarnaannya yang
mencakup beberapa faktor penting dalam pencahayaan seperti warna cahaya , posisi
cahaya dan koefisien pantul benda.
Salah satu teknik penggambaran objek 3D tersebut adalah denganmenggunakan
teknik ray tracing yaitu teknik yang digunakan untuk penggambaran membuat suatu
gambar yang realistik dengan mengkalkulasikan jalur yang dilewati cahaya yang
masuk ke pandangan pengamat pada beberapa sudut. Jalur ini ditelusuri mulai dari
titik pandang pengamat kembali ke objek yang akan digambar untuk menentukan
apakah titik pandang pengamat mengenai benda atau tidak. Pada saat titik pandang
pengamat mengenai benda maka akan dihitung nilai warna pixel pada titik tabrak
tersebut dengan memperhitungkan warna cahaya, posisi cahaya dan koefisien pantul
benda.
2. Rumusan Masalah
Dari latar belakang di atas, kami sadar permasalahan yang ada adalah bagaimana
langkah-langkah penggambaran objek 3D. Selain itu juga bagaimana algoritma dan
penjabaran tentang penggambaran objek 3D. Hal ini dikuatkan dengan
penggambaran objek tiga dimensi dengan bahasa pemograman java.
3. Kerangka Teori
a. Konsep Program Penggambaran Objek 3D
Program penggambaran objek 3D ini dibuat dengan menggunakan Java
dengan library openGL.
b. Dasar Teori Grafika Komputer
Objek 3D merupakan objek yang dibentuk dari beberapa koordinat (X,Y,Z)
yang dihubungkan. Koordinat-koordinat untuk merepresentasikan objek 3D akan
lebih dinamis dan mudah dipelajari apabila ditulis dalam sebuah file teks. File
teks ini selain berisi tentang informasi koordinat objek 3D juga menyimpan
informasi jumlah titik, jumlah garis dan garis yang menghubungkan antar titik.
Gambar di atas terdiri atas 8 buah titik dimana tiap-tiap titik dihubungkan
dengan garis dengan jumlah total garis adalah 12 buah garis. Dimana garis 1
menghubungkan T1 dan T2 dst hingga semuanya terhubung.
Translasi / Pergeseran
Sebuah titik dapat digeser atau ditranslasikan dengan persamaan sebagai berikut :
X’ = x1 + Tx
Y’ = y1 + Ty
Z’ = z1 + Tz
Ket :
x1,y1,z1 : koordinat titik awal
X’,Y’,Z’: koordinat titik hasil
Tx : faktor perpindahan ke arah X (horisontal)
Ty : faktor perpindahan ke arah Y (vertikal)
Tz : faktor perpindahan ke arah Z (kedalaman)
Skala
Sebuah objek dapat diperbesar atau diperkecil dengan persamaan sebagai berikut :
X’ = Sx * x
Y’ = Sy * y
Z’ = Sz * Z
Ket :
Sx : faktor pembesaran horizontal
Sy : faktor pembesaran vertical
Sz : faktor pembesaran kedalam
Rotasi
Mengelilingi Sumbu Z :
Rotasi 2D sebenarnya adalah rotasi 3D terhadap sumbu Z. Sebuah titik dapat
digeser atau ditranslasikan dengan persamaan sebagai berikut :
X’ = x.cos Θ – y.sin Θ
Y’ = x.sin Θ + y.cos Θ
Z’ = Z
Mengelilingi Sumbu X :
X’ = X
Y’ = y.cos Θ - z.sin Θ
Z’ = y.sin Θ + z.cos Θ
Mengelilingi Sumbu Y :
X’ = X.cos Θ + z.sin Θ
Y’ = Y
Z’ = -x.sin Θ + z.cos Θ
Ket :
x,y,z : koordinat titik asal
X’,Y’,Z’: koordinat hasil perputaran
Θ : sudut putar.
Dinyatakan dalam radian, maka tranformasinya
Θ = (sudut_derajat/180* Θ) dengan Θ = 22/7
BAB 2
PEMBAHASAN
c. Viewport
Ukuran lebar dan tinggi dari area klipping biasanya berbeda dengan
ukuran lebar dan tinggi window dalam satuan pixel. Dengan adanya
perbedaan ini, maka dilakukan pemetaan dari sistem logika kordinat kartesian
ke kordinat layar, pemetaan ini dikenal dengan viewport. Viewport adalah
area yang terletak pada area client window yang digunakan sebagai
penggambaran area klipping. Viewport mempermudah pemetaan area klipping
ke area window. Pada gambar 3 window dengan ukuran 300x200 dengan
viewport didefinisikan memenuhi keseluruhan area client. Jika area klipping
diatur dengan panjang sumbu x dimulai dari 0 sampai 150 dan panjang sumbu
y dimulai dari 0 sampai 100, maka kordinat logika dipetakan ke sistem
kordinat yang lebih besar dalam pandangan window. Setiap kenaikan pada
sistem kordinat logika dipadankan dengan dua kali kenaikan pada sistem fisik
kordinat (layar) dari window.
Gambar 3. viewport yang didefinisikan sebagai dua kali ukuran clipping area
e. Kordinat kartesian 3D
Sistem kordinat 3D merupakan perluasan dari sistem kordinat 2D
dengan menambahakan dimensi ketiga. Gambar 5 merupakan sistem kordinat
kartesian dengan sumbu baru z. Sumbu z tegak lurus dengan sumbu x maupun
sumbu y.
f. Proyeksi
Dua proyeksi yang perlu diperhatikan dalam OpenGL adalah ortografik
dan perspektive.
• Penerapan proyeksi ortografik dilakukan dengan menetapkan kotak
pandang volum (square viewing volume). Apapun yang berada diluar
volum tidak akan digambar. Selain itu pada proyeksi ortografik semua
objek yang memiliki dimensi sama nampak dengan ukuran yang sama
pula, tak peduli letaknya jauh ataupun dekat. Projeksi jenis ini (seperti
pada gambar 6) seringkali digunakan dalam desin arsitektur, computer-
aided design (CAD), atau grap 2D. Sering kali projeksi ini digunakan
untuk menambahkan tek atau 2D diatas skene grafik 3D.
B. Tahapan-Tahapan Pemodelan 3D
Proses pemodelan 3D dibagi menjadi beberapa tahapan untuk
pembentukannya. Seperti obyek apa yang ingin dibentuk sebagai obyek dasar,
metoda pemodelan obyek 3D, pencahayaan dan animasi gerakan obyek sesuai
dengan urutan proses yang akan dilakukan.
Motion Capture/Model 2D
Yaitu langkah awal untuk menentukan bentuk model obyek yang akan
dibangun dalam bentuk 3D. Penekanannya adalah obyek berupa gambar wajah
yang sudah dibentuk intensitas warna tiap pixelnya dengan metode Image
Adjustment Brightness/Contrast, Image Color Balance, Layer Multiply, dan
tampilan Convert Mode RGB dan format JPEG. Dalam tahap ini digunakan
aplikasi grafis seperti Adobe Photoshop atau sejenisnya.
Dasar Metode Modeling 3D
Ada beberapa metode yang digunakan untuk pemodelan 3D. Ada jenis
metode pemodelan obyek yang disesuaikan dengan kebutuhannya seperti
dengan nurbs dan polygon ataupun subdivision. Modeling polygon merupakan
bentuk segitiga dan segiempat yang menentukan area dari permukaan sebuah
karakter. Setiap polygon menentukan sebuah bidang datar dengan meletakkan
sebuah jajaran polygon sehingga kita bisa menciptakan bentuk-bentuk
permukaan. Untuk mendapatkan permukaan yang halus, dibutuhkan banyak
bidang polygon. Bila hanya menggunakan sedikit polygon, maka object yang
didapat akan terbagi sejumlah pecahan polygon. Sedangkan Modeling dengan
NURBS (Non-Uniform Rational Bezier Spline) merupakan metode paling
populer untuk membangun sebuah model organik. Kurva pada Nurbs dapat
dibentuk dengan hanya tiga titik saja. Dibandingkan dengan kurva polygon
yang membutuhkan banyak titik (verteks) metode ini lebih memudahkan untuk
dikontrol. Satu titik CV (Control verteks) dapat mengendalikan satu area untuk
proses tekstur.
Proses Rendering
Rendering adalah proses akhir dari keseluruhan proses pemodelan ataupun
animasi komputer. Dalam rendering, semua data-data yang sudah dimasukkan
dalam proses modeling, animasi, texturing, pencahayaan dengan parameter
tertentu akan diterjemahkan dalam sebuah bentuk output. Dalam standard PAL
system, resolusi sebuah render adalah 720 x 576 pixels. Bagian rendering yang
sering digunakan:
- Field Rendering, sering digunakan untuk mengurangi strobing effect yang
disebabkan gerakan cepat dari sebuah obyek dalam rendering video.
- Shader, merupakan sebuah tambahan yang digunakan dalam 3D software
tertentu dalam proses special rendering. Biasanya shader diperlukan untuk
memenuhi kebutuhan special effect tertentu seperti lighting effects,
atmosphere, fog dan sebagainya.
Texturing
Proses texturing ini untuk menentukan karakterisik sebuah materi obyek
dari segi tekstur. Untuk materi sebuah object bisa digunakan aplikasi properti
tertentu seperti reflectivity, transparency, dan refraction. Texture kemudian bisa
digunakan untuk meng-create berbagai variasi warna pattern, tingkat
kehalusan/kekasaran sebuah lapisan object secara lebih detail.
1. Kubus
Source code :
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.GLCanvas;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;
final GL gl = gLDrawable.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glBegin(GL.GL_QUADS);
gl.glEnd();
gl.glFlush();
rquad += 0.15f;
GL gl = gLDrawable.getGL();
gl.glShadeModel(GL.GL_SMOOTH);
gl.glClearDepth(1.0f);
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glDepthFunc(GL.GL_LEQUAL); \
gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);
int height) {
final GL gl = gLDrawable.getGL();
if (height <= 0)
height = 1;
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
canvas.addGLEventListener(new Kubus());
frame.add(canvas);
frame.setSize(640, 480);
frame.addWindowListener(new WindowAdapter() {
@Override
animator.stop();
System.exit(0);
}).start();
}
});
frame.setLocationRelativeTo(null);
frame.setVisible(true);
animator.start();
Output:
Analisa Hasil
Dalam pembuatan objek 3D dengan Java OpenGL ini pertama-tama kita perlu
meng-import beberapa package seperti :
import com.sun.opengl.util.Animator;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;
2. Piramid
Source code:
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.GLCanvas;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;
final GL gl = gLDrawable.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glBegin(GL.GL_TRIANGLES);
gl.glEnd();
gl.glFlush();
r += 0.3f;
GL gl = gLDrawable.getGL();
gl.glShadeModel(GL.GL_SMOOTH);
gl.glClearDepth(1.0f);
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glDepthFunc(GL.GL_LEQUAL);
gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);
int height) {
final GL gl = gLDrawable.getGL();
if (height <= 0)
height = 1;
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
canvas.addGLEventListener(new Pyramid());
frame.add(canvas);
frame.setSize(640, 480);
frame.addWindowListener(new WindowAdapter() {
@Override
animator.stop();
System.exit(0);
}).start();
});
frame.setLocationRelativeTo(null);
frame.setVisible(true);
animator.start();
Output:
Analisa Hasil
BAB 3
PENUTUP
Kesimpulan