Pada bab ini akan dibahas implementasi bertujuan memastikan apakah aplikasi yang dibuat berjalan sesuai yang penulis harapakan. Sebelum program diimplementasikan maka program harus bebas dari kesalahan, kesalahan saat proses ataupun kesalahan logical. Program dapat diimplementasikan setelah bebas dari kesalahan setelah pengujian.
4.1 Implementasi Program
Di dalam implementasi ini di deskripsikan dengan listing: #include<stdlib.h>
#include<GL/glut.h>
Kode 4.1 Fungsi ini digunakan untuk memanggil fungsi GLUT di Windows.
static float xpoz = 0, ypoz = 0, zpoz = 0,d = -12, e = -5,f = -5, pintu=0; Berfungsi untuk mendeklarasikan posisi awal x,y,dan z pada saat aplikasi di jalankan. Contoh source code
Kode 4.2 penerapan kode pada aplikasi Di bawah ini adalah contoh dari kode diatas
Gambar 4.1 tampilan awal aplikasi
Kode 4.1 akan di jelaskan dengan flowchart di bwah ini:
Gambar 4.2 flowchart listing dari fungsi library glut
Pengimlementasian yang selanjutnya termasuk dalam fungsi dari library glut di gambarkan dalam table.
Table 4.1 Implementasi source code
Source code Penjelasan
glColor3f(0.3,0.2,0.1) Berfungsi untuk mendefinisikan warna pada objek yang di buat (0.3,0.2,0.1) yaitu kuning. glVertex3d(x1,y1,z2); Berfungsi untuk menyatakan titik koordinat
x,y,z
glLoadIdentifity (); Berfungsi memanggil matriks identitas ke
matriks saat ini, agar nilai awal kembali ke pusat koordinat yaitu (0,0,0).
glEnable(GL_DEPTH_TEST); Berfungsi untuk mengaktifkan atau
menampilkan GL_DEPTH_TEST
glClearColor (0.3, 0.3, 0.5, 0.0); Berfungsi mendefinisikan warna pada windows yang dibuat dengan warna (0.3, 0.3, 0.5, 0.0) yaitu abu – abu.
glShadeModel (GL_SMOOTH); Berfungsi untuk member warna bayangan
glMatrixMode
(GL_PROJECTION);
Berfungsi untuk memberi nilai masukan pada matriks dengan model projection.
glTranslatef(d,e,f); Berfungsi menggeser seluruh pemandangan
ke kiri, kanan, atas, bawah, maju dan mundur sesuai nilai x,y dan z.
glRotatef(xpoz,0,1,0); Berfungsi untuk memutar seluruh obyek
dengan sudut angle (0-359) dan vector yang dinyatakan dengan nilai x,y dan z.
glutSolidCube(6.0f); Berfungsi membuat kubus.
glBegin(GL_QUADS); Berfungsi membuat segi empat.
glutInitDisplayMode
(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
Untuk instalasi modus display. Fungsi ini meminta window yang bersifat double buffered, dengan warna RGB.
glutInitWindowSize (1024, 720); Membuat windows dengan ukuran
(1024,700) pada layar computer. glutInitWindowPosition (100,
100);
Membuat titik kiri atas window diletakan pada (100,100) pada layar computer.
glutKeyboardFunc(keyboard); Berfungsi mengaktifkan fungsi pada keyboard.
glutSwapBuffers(); Digunakan untuk menukar bagian belakang
menjadi bagian depan buffer. glOrtho(-12,12,-6,6,-35,35);
Mendeinisikan besarnya sistem koordinat dengan range sumbu x adalah (12,12), range untuk sumbu y adalah (-6,6), range sumbu z adalah (-35,35).
Contoh gambar pada glOrtho.
gluPerspective(80.0,2.2, 1.0, 100.0);
berfungsi untuk mendeklarasikan jarak ke depan dan ke belakang dari bidang pandang.
Contoh gambar glutPrespective.
Gambar 4.4 gluPrespective
Bentuk solid
glutSolidTorus dan glutSolidsphere //Ban Belakang glPushMatrix(); glColor3f(1.0, 1.0, 1.0); glScalef(0.35, 0.35, 0.25); glTranslatef(25.0, 4.5, 19.3); glutSolidTorus(2, 3, 20, 30); glPopMatrix(); //Velg glPushMatrix(); glColor3f(0.0, 0.0, 0.0); glScalef(0.5, 0.5, 0.5); glTranslatef(17.5, 2.5, 8.0); glutSolidSphere(2, 10, 20); glPopMatrix();
//Velg glPushMatrix(); glColor3f(0.0, 0.0, 0.0); glScalef(0.5, 0.5, 0.5); glTranslatef(-17.5, 2.5, 8.0); glutSolidSphere(2, 10, 20); glPopMatrix(); //Ban Depan glPushMatrix(); glColor3f(1.0, 1.0, 1.0); glScalef(0.35, 0.35, 0.25); glTranslatef(-25.0, 4.5, -19.3); glutSolidTorus(2, 3, 20, 30); glPopMatrix(); //Velg glPushMatrix(); glColor3f(0.0, 0.0, 0.0); glScalef(0.5, 0.5, 0.5); glTranslatef(17.5, 2.5, -8.0); glutSolidSphere(2, 10, 20); glPopMatrix(); glPushMatrix(); glColor3f(1.0, 1.0, 1.0); glScalef(0.35, 0.35, 0.25); glTranslatef(-25.0, 4.5, 19.3); glutSolidTorus(2, 3, 20, 30); glPopMatrix(); //Velg glPushMatrix(); glColor3f(0.0, 0.0, 0.0);
glScalef(0.5, 0.5, 0.5); glTranslatef(-17.5, 2.5, -8.0); glutSolidSphere(2, 10, 20); glPopMatrix();
kode 4.3 membuat roda dan velg
Fungsi glutSolidSphere yaitu membuat bola dan fungsi glutSolidTorus adalah menggambar dengan bentuk seperti donat berpusat pada asal pemodelan sistem koordinat. Di bawah ini contoh tampilan
Gambar 4.5 velg dan ban glPushmatrix dan glPopMatrix
glPushMatrix berfungsi menyimpan koordinat yang ada. Sedangkan glPopMatrix adalah suatu fungsi guna memanggil suatu fungsi yang telah disimpan pada glPushMatrix.
Contoh program: glColor3f(0.5, 0.3, 0.2); glPushMatrix(); glTranslatef(0.0, 9.8, -4.0); glScalef(1.0, 0.8, 0.2); glutSolidCube(6.0f); glPopMatrix();
glColor3f(0.5, 0.0, 0.2); glPushMatrix(); glTranslatef(0.0, 9.8, -4.6); glScalef(0.05, 0.8, 0.005); glutSolidCube(6.0f); glPopMatrix();
kode 4.4 contoh glPushMatrix dan glPopMatrix
Fungsi di atas untuk menggambar kubus solid. GLUT menyediakan objek sederhana yang langsung bias dipanggil dengan mudah. Pada objek diatas sebelum fungsi memanggil objek kubus dipanggil terjadi 2 buah transformasi yaitu skala dan rotasi. Jika tanpa ada push dan pop serta transformasi secara default objek akan dirender pada skala default dan posisi default.
Operasi push dan pop matrix adalah operasi penambahan stack matrix pada model view matrix untuk transformasi. Pada kode diatas ditambahkan translasi atau pergeseran x, y, z = (0.0, 9.8, -4.0) dan sisi satunya x, y, z = glTranslatef(0.0, 9.8, -4.6) operasi pop. matrix transformasi dirubah dengan menambahkan translate dan scale pada stack matrix model view sehingga objek kubus yang dipanggil melalui perhitungan transformasi. glPop mengeluarkan matrix transformasi keluar dari tumpukan sehingga mengembalikan matrix modelview menjadi matrix identitas. Berikut tampilan dari kode diatas adalah pintu pada lantai 2
Gambar 4.6 pintu pada lantai 2
4.2 Implementasi void pada source code dan pengerjaan 1. Void Kubus
menjelaskan mengenai bagaimana kotak kubus 3 dimensi dapat melalui beberapa titik. Apabila digabungkan akan menjadi kubus 3 dimensi. Di void kubus ini memiliki 6 bagian kubus yang harus di selesaikan agar membentuk kubus 3 dimensi.
void Kubus
(float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4,float z1,float z2,float z3)
//sisi atas glVertex3d(x3,y3,z2); glVertex3d(x4,y4,z2); glVertex3d(x4,y4,z1); glVertex3d(x3,y3,z1); //sisi depan glVertex3d(x1,y1,z2); glVertex3d(x2,y2,z2); glVertex3d(x3,y3,z2); glVertex3d(x4,y4,z2); //sisi kanan glVertex3d(x2,y2,z2); glVertex3d(x2,y2,z1); glVertex3d(x3,y3,z1); glVertex3d(x3,y3,z2); //sisi belakang glVertex3d(x1,y1,z1); glVertex3d(x2,y2,z1); glVertex3d(x3,y3,z1); glVertex3d(x4,y4,z1); //sisi kiri glVertex3d(x1,y1,z2); glVertex3d(x1,y1,z1); glVertex3d(x4,y4,z1); glVertex3d(x4,y4,z2); //sisi bawah glVertex3d(x1,y1,z2); glVertex3d(x2,y2,z2); glVertex3d(x2,y2,z1); glVertex3d(x1,y1,z1); }
Berikut ini tampilan dari kode diatas:
Gambar 4.7 bodi bus lantai 1 dibuat dengan menggunakan void 2. Void init(void)
berfungsi menggambar, mengatur warna dan koordinat sistem. void init(void) { glClearColor (0.3, 0.3, 0.5, 0.0); glOrtho(-12,12,-6,6,-35,35); glEnable(GL_DEPTH_TEST); glShadeModel (GL_SMOOTH); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective(80.0,2.2, 1.0, 100.0); glMatrixMode (GL_MODELVIEW); }
Tampilan dari kode diatas sama dengan gambar 4.1 tetapi dari sini kita bias menggatur warna dasar dari aplikasi, koordinat posisi kamera dan jarak kamera dari objek.
3. Void display(void)
berfungsi menggambar dan mengatur warna dan koordinat.
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity (); //digunakan untuk me-nonaktifkan/me-reset transformasi sebelumnya
glTranslatef(d,e,f); //digunakan untuk melakukan perpindahan posisi gelombang glRotatef(xpoz,0,1,0); glRotatef(ypoz,1,0,0); glRotatef(zpoz,0,0,1); Kode 4.7 Rotasi Contoh rotasi:
Gambar 4.8. Objek dan rotasi 4. Void keyboard
Setelah aplikasi sudah selesai maka di bawah ini script berisi navigasi penggunaan tombol keyboard yang digunakan untuk menggerakan kamera.
Maksud Dari “d,e,f,xpoz” di bawah ialah dari glTranslatef(d,e,f); yang digunakan untuk melakukan perpindahan posisi d ialah sumbu x, dan e
ialah sumbu y, dan f ialah sumbu z dan untuk glRotatef(xpoz,0,1,0); ialah melakukan rotasi ke sumbu Y.
void keyboard(unsigned char key, int x, int y) { switch (key) { case 'x': xpoz=xpoz+5; if (xpoz>360) xpoz=0; glutPostRedisplay(); break; case 'c': xpoz=xpoz-5; if (xpoz>360) xpoz=0; glutPostRedisplay(); break; case 'y': ypoz=ypoz+5; if (ypoz>360) ypoz=90; glutPostRedisplay(); break; case 'u': ypoz=ypoz-5; if (ypoz>360) ypoz=0; glutPostRedisplay(); break; case 'z': zpoz = zpoz+5; if (zpoz>360) zpoz=0; glutPostRedisplay(); break; case 'w': e = e - 1;
glutPostRedisplay(); break; case 's': e = e + 1; glutPostRedisplay(); break; case 'a': d = d + 1; glutPostRedisplay(); break; case 'd': d = d - 1; glutPostRedisplay(); break; case 'q': f = f + 1; glutPostRedisplay(); break; case 'e': f = f - 1; glutPostRedisplay(); break;
case 27:; //Tekan ESC untuk exit exit(0);
} }
4.3 Pengujian
Pada tahab ini penulis akan melakukan pengujian menggunakan black box terhadap program.
Table 4.2 Pengujian
Rancangan Hasil yang diharapkan Hasil
Compile program Aplikasi berjalan OK
Tombol W Kamera bergerak ke atas OK
Tombol A Kamera bergerak ke kiri OK
Tombol S Kamera bergerak ke bawah OK
Tombol D Kamera bergerak ke kanan OK
Tombol Q Kamera bergerak maju OK
Tombol E Kamera bergerak mundur OK
Tombol Y Kamera berputar ke sumbu Y OK
Tombol Esc Exit program OK
4.4 Hasil Program
Hasil akhir pada aplikasi ini.
Gambar 4.10 Tampilan ruang kelas ekonomi Pada kelas ekonomi bis hanya menyediakan bangku.
Gambar 4.11 tampilan ruang kelas bisnis Pada kelas bisnis disediakan fasilitas tambahan 2 buah TV
Gambar 4.12 Tampilan ruang kelas VIP