OBJEK 3 DIMENSI
“ROBOT HUMANOID”
LAPORAN
UNTUK MEMENUHI TUGAS AKHIR MATAKULIAH
Praktikum Grafika Komputer
Yang Dibina oleh Heru Wahyu Herwanto, S.t., M.Kom.
Oleh
Ananda Putri Syaviri
130533608243
Nena Erviana
130533608234
Offering B 2013
UNIVERSITAS NEGERI MALANG
FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
OBJEK 3 DIMENSI
“ROBOT HUMANOID”
Ananda Putri Syaviri1, Nena Erviana2Jurusan Teknik Elektro, Fakultas Teknik, Universitas Negeri Malang syaviri@yahoo.co.id 1 , nena_underground@yahoo.co.id
www.um.ac.id
Abstrak
Perkembangan teknologi saat ini menjadi andalan dan kebutuhan masyarakat IT, terutama pada teknologi komunikasi dan informasi berbasi komputer. Hal ini menyebabkan produk berbasis IT mulai banyak bermunculan. Salah satu produk IT tersebut iaalah 3dsMax, dengan menggunakan produk imi, banyak bangun 3Dimensi dapat dibentuk. Produk 3dsMax merupakan software untuk membuat objek tiga dimensi yang menyediakan berbagai tool untuk pembuatan objek tiga dimensi. Produk ini memiliki kemampuan dalam menggabungkan objek image, vektor dan tiga dimensi, serta terdapat aplikasi untuk menambahkan animasi pada objek tersebut. Animasi dimensi tiga ini dapat diintegrasikan pada halaman multimedia dan dapat berdiri sendiri sebagai sebuah movie. Adapun pemberian animasi pada objek ini menggunakan aplikasi pemrograman visual basic dengan menggunakan bahasa OpenGlut.
Kata kunci : Robot, 3dsMax, Lighting, objek 3D, OpenGlut
1. Pendahuluan
1.1 Latar Belakang
Perkembangan komputer saat ini sudah mengalami banyak perubahan yang sangat pesat jika dibandingkan dengan waktu sebelumnya, seiring dengan kebutuhan manusia yang semakin banyak dan kompleks. Pada awalnya komputer hanya digunakan untuk para akademisi dan militer, namun saat ini berbagai kalangan dapat menggunakan komputer.
Kini komputer juga banyak digunakan dalam berbagai bidang dalam kehidupan, tidak hanya untuk urusan kemiliteran atau akademisi, tetapi digunakan juga dalam bidang kesehatan, pendidikan, psikologi, permainan, jual- beli dan lain- lain.
Dalam kehidupan sehari- hari, banyak instansi perusahaan, maupun lembaga pendidikan yang membutuhkan program aplikasi untuk dapat membuat sebuah rancangan objek 3D yang nantinya digunakan untuk bahan presentasi maupun sebagai perancangan untuk membuat sebuah renovasi gedung maupun pembuatan objek yang digunakan untuk menunjang sistem kerja instansi tersebut.
Banyak program aplikasi yang dapat digunakan untuk membuat rancangan objek 3D ini, diantaranya 3dsMax dan blender. Dalam dunia pemrograman dan desain grafis computer, sudah banyak pengembangan aplikasi yang ada untuk dapat membuat rancangan tersebut.
perencanaan yang telah disusun. Program ini menggunakan bahasa pemrograman visual basic dan openGlut untuk membuat animasi pada objek yang dibuat pada apliaksi blender maupun 3dsMax.
1.2 Tujuan
Tujuan pembuatan program untuk menghasilkan objek 3D berbentuk robot dengan menerapkan konsep lighting dan pemberian animasi dengan interaksi keyboard dan mouse. Berikut tujuan lain dari pembuatan program ini:
- Untuk memenuhi tugas akhir mata kuliah Praktikum Grafika Komputer.
- Dapat membangun sebuah objek 3D pada aplikasi 3dsMax maupun blender.
- Dapat menerapkan konsep- konsep grafika komputer pada objek yang dibuat.
- Dapat memahami penggunaan fungsi- fungsi openGlut dalam membuat sebuah objek dan penerapan animasi serta interaksinya.
- Dapat menghasilkan program aplikasi objek 3D yang dapat membantu dalam perancangan untuk pembangunan objek di lapangan.
1.3 Batasan Masalah
Pembatasan pada penulisan paper tugas akhir adalah sebagai berikut:
1. Sistem ini menggunakan penerapan lighting. 2. Sistem ini menggunakan interaksi keyboard
baik pada tombol special dan tombol biasa. 3. Sistem ini menerapkan animasi dengan fungsi
scalef, untuk translasi, dan rotatef.
4. Sistem ini menggunakan penerapan fungsi interasi mouse.
2. Perancangan
Perancangan aplikasi ini berawal dari pembuatan objek yang menggunakan aplikasi software 3dsMax atau blender. Kemudian dieksport kedalam format .obj jika menggunakan 3dsMax, dan format .obj & .mtl jika menggunakan blender. Jika menggunakan aplikasi 3dsMax maka perlu mengimport file .obj pada 3dsMax kedalam blender, kemudian dieksport kembali kedalam format .obj dan secara otomatis blender akan mengeksport juga file dalam format .mtl. Kemudian untuk pemberian interaksi keyboard dan efek lighting dan texturing dilakukan pada aplikasi program visual basic.
Alur program yang digunakan dalam pembentukan objek robot humanoid ini adalah: 1. Start 4. Deklarasi fungsi drawmodel_box 5. Deklarasi fungsi display
6. Deklarasi fungsi init 7. Deklarasi fungsi reshape 8. Deklarasi fungsi update 9. Deklarasi fungsi mouse 10. Deklarasi fungsi motion mouse
11. Deklarasi fungsi my Keyboard dan special Keyboard.
12. Deklarasi fungsi main untuk pemanggilan fungsi-fungsi diatas agar dapat meload objek yang telah dibuat.
13. Selesai.
2.1 Flowchart ( lampiran) 2.2 Kode Program
//deklarasi header
#include<windows.h> #include<glut.h> #include"glm.h"
int z = -20;
//deklarasi koordinat dan variabel yang digunakan
float tx=0, ty=0, tz=-5;
int w = 640, h = 480;
int x1 = 0, y1 = 0, z1 = 0, sudut = 0; // deklarasi sumbu x, y, z dan sudut
float cx=0, cy=0, cz=0;
int a, b; //untuk deklarasi variabel x dan y
//deklarasi penggunaan parameter lighting
float x_light, y_light, z_light = 0.5; //nilai lighting yang digunakan 0.5
//deklarasi pointer untuk load objek
GLMmodel* pmodel1 = NULL;
//deklarasi pemanggilan objek robot
void drawmodel_box(void){
if (!pmodel1){
glColor3f(1,0,1); // deklarasi warna
pmodel1 =
glmReadOBJ("Robot.obj"); //fungsi untuk membaca file robot.obj
if (!pmodel1) exit(0);
glmUnitize(pmodel1);
glmFacetNormals(pmodel1);
glmVertexNormals(pmodel1, 100.0); //deklarasi vertex yang digunakan
}
glmDraw(pmodel1, GLM_SMOOTH| GLM_TEXTURE); //deklarasi gambar dengan fungsi glm_smooth, glm_texture
}
//deklarasi pemanggilan fungsi untuk penampilan objek
void display(void){ glClear
(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT); //fungsi pewarnaan background
glLoadIdentity(); //fungsi loadIdentity
/*inisialisasi pemanggilan fungsi lighting*/
GLfloat LightPosition[] = {15.0f, 15.0f, 25.0f, 0.5f};
LightPosition[0] = a; LightPosition[1] = b; LightPosition[2] = 150;
//deklarasi dan inisialisasi array untuk posisi lighting
//GLfloat LightPosition[] = {x_light, y_light, z_light, 1};
glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);
//deklarasi fungsi lighting specular
GLfloat LightSpecular[] = {0.5, 0.5, 0.5, 1.0};
//deklarasi fungsi shine ( pemberian cahaya)
//deklarasi pemberian animasi pada objek robot
glPushMatrix();
glTranslatef(0,0,z); //fungsi translasi dengan parameter 0,0,-20
glRotatef(sudut,x1,y1,z1); //fungsi rotasi dengan parameter 0,0,0,0 -> sesuai pendeklarasian pada variabel
drawmodel_box(); // pemanggilan fungsi drawmodel_box
//menampilkan objek
drawmodel_box(); glPopMatrix(); glPopMatrix();
Sleep(10); // fungsi untuk
menampilkan animasi objek yang dapat bergerak sendiri
glutSwapBuffers(); }
//fungsi init untuk meload objek (fungsi utama)
void init(void){
GLfloat LightPosition[] = {x_light, y_light, z_light, 20, 0};
GLfloat LightAmbient[] = {0.0f, 0.0f, 0.0f, 0.0f};
GLfloat LightDiffuse[] = {0.7f, 0.7f, 0.7f, 0.1f};
GLfloat LightSpecular[] = {0.5f, 0.5f, 0.5f, 0.1f};
GLfloat Shine[] = {80};
glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode (GL_PROJECTION); glLoadIdentity();
gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode (GL_MODELVIEW); }
//fungsi update untuk interaksi load objek
void update (int value){
glutPostRedisplay();
glutTimerFunc(60, update, 0); } arah bawah pada sumbu y
x1=0; y1=1; z1=0; sudut+=3;}
elseif (key == 'n'){ // untuk fungsi rotatef ke arah atas pada sumbu x
sudut-=3; }
elseif (key == 'p') { // untuk fungsi rotatef ke arah kiri pada sumbu y dengan searah jarum jam untuk ke arah kanan pada sumbu y dengan berlawanan arah jarum jam
y1=1;
const GLfloat light_ambient[] = { 0.3f, 0.3f, 0.3f, 1.0f };
const GLfloat light_diffuse[] = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_ambient2[] = { 0.3f, 0.3f, 0.3f, 0.0f };
const GLfloat light_diffuse2[] = { 0.3f, 0.3f, 0.3f, 0.0f };
const GLfloat mat_ambient[] = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };
void mySpecialKeyboard(int key, int x, int
y){
switch(key){
case GLUT_KEY_UP : //untuk fungsi scalef ukuran besar
z++;
break;
case GLUT_KEY_DOWN : //untuk fungsi scalef ukuran kecil
z--;
break;
case GLUT_KEY_RIGHT : //untuk rotatef ke arah bawah pada sumbu x
x1=1; sudut+=3;
break;
case GLUT_KEY_LEFT : //untuk fungsi rotatef ke arah atas pada sumbu z
z1=1; { glutInit(&argc, argv);
glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize (800, 640); glutInitWindowPosition (150, 150); glutCreateWindow ("ROBOT
HUMANOID");
gluOrtho2D(-100,100,-100,100); init();
glutReshapeFunc(reshape); glutTimerFunc(60, update, 0); glutKeyboardFunc(mykeyboard); glutSpecialFunc(mySpecialKeyboard); glutPassiveMotionFunc(motion); glutMainLoop();
}
2.3 Pembahasan
Penjelasan Kode Program
I. Header
- #include"stdafx.h"
: digunakan untuk pemanggilan header - #include<stdlib.h>
: digunakan untuk inisialisasi header - #include<windows.h>
: digunakan untuk inisialisasi header penampilan windows aplikasi. - #include<glut.h>
: digunakan untuk pemanggilan fungsi glut yang ada pada script
- #include"glm.h"
: digunakan untuk pemanggilan fungsi yang ada pada folder glm pada project visual basic
II. Deklarasi variable
//deklarasi koordinat dan variabel yang digunakan
- int z = -20;
- float tx=0, ty=0, tz=-5; - int w = 640, h = 480;
- int x1 = 0, y1 = 0, z1 = 0, sudut = 0; // deklarasi sumbu x, y, z dan sudut - float cx=0, cy=0, cz=0;
- int a, b; //untuk deklarasi variabel x dan y
- float x_light, y_light, z_light = 0.5;
//deklarasi penggunaan parameter lighting
- GLMmodel* pmodel1 = NULL;
//deklarasi pointer untuk load objek
Deklarasi diatas digunakan untuk pemanggilan nilai- nilai variable yang digunakan sebagai parameter fungsi.
III. Fungsi
a) drawmodel_box(void): digunakan untuk deklarasi pemanggilan objek yang telah dibuat pada aplikasi 3dsMax dalam format .obj
b) display(void) : digunakan untuk deklarasi pemanggilan fungsi untuk menampilkan objek
c) init(void) : digunakan untuk deklarasi meload objek dengan pendeklarasian penggunaan lighting dalam objek ini. d) reshape (int w, int h) : digunakan
untuk pendeklarasian fungsi viewport, matrixmode, loadidentity, perspektif yang fungsinya membentuk objek 3D.
e) update (int value) : digunakan untuk interaksi load objek dengan fungsi timerfunc dan postredisplay
f) mouse(int tombol, int state, int x,
int y) : digunakan untuk pendeklarasian penggunaan interaksi mouse
g) motion(int x, int y) : digunakan untuk fungsi motion/pergerakan mouse
h) mykeyboard(unsigned char key, int
x, int y) : digunakan untuk pendeklarasian tombol keyboard yang digunakan untuk interaksi keyboard seperti rotate dan scalef pada objek. i) mySpecialKeyboard(int key, int x,
int y) : digunakan untuk pendeklarasian tombol navigasi keyboard yang digunakan untuk interaksi keyboard.
j) main(int argc, char** argv) : digunakan sebagai fungsi utama untuk pemanggilan fungsi- fungsi yang terkait dengan menampilkan objek pada windows aplikasi.
- glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
digunakan untuk pewarnaan pada display objek
- glutInitWindowSize (800, 640);
digunakan untuk pengaturan size window untuk menampilkan objek
- glutInitWindowPosition (150, 150);
digunakan untuk pengaturan posisi window pada desktop untuk menampilkan objek
- glutCreateWindow ("ROBOT HUMANOID");
digunakan untuk pemberian judul window
- gluOrtho2D(-100,100,-100,100);
digunakan untuk pengaturan system koordinat yang digunakan.
- init();
digunakan untuk pemanggilan fungsi init yang sebelumnya telah dideklarasikan untuk fungsi lighting objek.
- glutDisplayFunc(display); - glutTimerFunc(60, update, 0);
digunakan untuk pengaturan timer/ motion yang digunakan.
- glutKeyboardFunc(mykeyboard);
digunakan untuk pemanggilan fungsi interaksi keyboard tombol biasa.
- glutSpecialFunc(mySpecialKeyboar d);
digunakan untuk pemanggilan fungsi
interaksi keyboard tombol
special/navigasi.
- glutPassiveMotionFunc(motion);
digunakan untuk motion atau pergerakan objek menggunakan passive motion
- glutMainLoop();
digunakan untuk fungsi perulangan pada program objek ini.
3. Kesimpulan
Berdasarkan uraian yang telah disampaikan baik dari proses awal perancangan hingga pengujian program, maka dapat disimpulkan bahwa Dengan menggunakan Bahasa pemrograman visual basic dan openGlut, dapat yang dapat digunakan jika nantinya akan dibuat di lapangan.
Dengan menggunakan bahasa
pemograman C++ di dalam visual basic studio maka dapat membuat sebuah objek menjadi objek 3D dengan pemberian animasi baik interaksi pasif maupun aktif, namun pada program ini menggunakan motion pasif dengan interakasi mouse dan keyboard.
LAMPIRAN
-