• Tidak ada hasil yang ditemukan

LAPORAN PEMBUATAN OBJEK 3DIMENSI dengan

N/A
N/A
Protected

Academic year: 2017

Membagikan "LAPORAN PEMBUATAN OBJEK 3DIMENSI dengan"

Copied!
11
0
0

Teks penuh

(1)

LAPORAN UAS

GRAFIKA KOMPUTER

“OBJEK 3 DIMENSI”

Untuk memenuhi matakuliah Grafika Komputer yang dibimbing oleh Bapak Heru WahyuHerwanto

Disusun Oleh:

Ananda Putri Syaviri (130533608243)

PTI OFF B

UNIVERSITAS NEGERI MALANG

FAKULTAS TEKNIK JURUSAN TEKNIK ELEKTRO

PROGRAM STUDI S1 PENDIDIKAN TEKNIKINFORMATIKA

(2)

PEMBUATAN OBJEK “ROBOT”

1) Langkah awal pembuatan objek dilakukan pada aplikasi 3dsMax, menggunakan tools tools yang tersedia, digabungkan dan disesuaikan dengan bentuk yang diinginkan , hasil:

(3)

3) Kemudian, di simpan lagi ( di eksport ) dalam format .obj agar dapat di load pada pemanggilan objek script openGlut.

(4)

5) Kemudian, buat script program untuk meload objek dan menerapkan interaksi serta efek lighting pada objek.

 Script program :

/*

//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

(5)

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)

GLfloat Shine[] = {25}; glClearDepth(1);

glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);

glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);

//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); }

//fungsi interaksi mouse

void mouse(int tombol, int state, int x, int y){ a = x-(w/2);

b = (h/2)-y; }

//fungsi motion/pergerakan mouse void motion(int x, int y){

a = x-(w/2); b = (h/2)-y; }

//fungsi interaksi keyboard

void mykeyboard(unsignedchar key, int x, int

y){

if(key == 'a') { //untuk fungsi rotatef ke arah bawah pada sumbu x

x1=1; y1=0; z1=0; sudut+=3;}

elseif (key == 'n'){ // untuk fungsi rotatef ke arah atas pada sumbu x

x1=1; sudut-=3; }

(6)

y1=1; 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 translasi pada sumbu z sehingga

menyebabkan perubahan ukuran menjadi lebih besar

z++;

break;

case GLUT_KEY_DOWN : //untuk fungsi translasi pada sumbu z sehingga

menyebabkan perubahan ukuran menjadi lebih kecil

z--;

break;

case GLUT_KEY_RIGHT : //untuk translasi 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; sudut-=3;

break;

} }

//deklarasi fungsi utama

void main(int argc, char** argv) { 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();

glutDisplayFunc(display); glutReshapeFunc(reshape); glutTimerFunc(60, update, 0); glutKeyboardFunc(mykeyboard); glutSpecialFunc(mySpecialKeyboard); glutPassiveMotionFunc(motion); glutMainLoop();

}

(7)

Tampilan awal

 Key Up

(8)

 Key left

 Tombol a

(9)

 Tombol e

 Tombol n

 Penjelasan:

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 yang dilakukan pada aplikasi program visual basic dan menggunakan openGlut. Alur program yang digunakan dalam pembentukan objek robot humanoid ini adalah:

1. Start

2. Deklarasi header

(10)

#include <stdlib.h>

#include <stdio.h>

#include <windows.h>

#include <gl/glut.h>

#include "glm.h"

3. Deklarasi variable

int z = -20; , dan sebagainya

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.

 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

 Deklarasi variable

//deklarasi koordinat dan variabel yang digunakan

- int z = -20;

- 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.

 Fungsi

a) drawmodel_box(void): digunakan untuk deklarasi pemanggilan objek yang telah dibuat pada aplikasi 3dsMax dalam format .obj

(11)

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.

 Fungsi pada void main

 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);

digunakan untuk meload objek pada fungsi display

 glutReshapeFunc(reshape);

digunakan untuk meload objek 3D yang telah dibuat pada fungsi reshape

 glutTimerFunc(60, update, 0);

digunakan untuk pengaturan timer/ motion yang digunakan.

 glutKeyboardFunc(mykeyboard);

digunakan untuk pemanggilan fungsi interaksi keyboard tombol biasa.

 glutSpecialFunc(mySpecialKeyboard); digunakan untuk pemanggilan fungsi

interaksi keyboard tombol

special/navigasi.

 glutPassiveMotionFunc(motion);

digunakan untuk motion atau pergerakan objek menggunakan passive motion

 glutMainLoop();

Referensi

Dokumen terkait

Penyesuaian diri dengan teman sebaya yaitu siswa mampu membangun dan menjalani hubungan pertemanan dengan baik sehingga tidak terjadi konflik dan merugikan diri sendiri

Untuk mengetahui lebih lanjut apa saja penyimpangan yang tidak kita sadari pernah terjadi dalam kekeluargaan, kita akan membahasnya perlahan dengan contoh yang konkrit dan nyata yang

Rataan kandungan protein kasar (PK) pellet unggas dengan penambahan level konsentrasi tepung daun pepaya yang berbeda masing-masing perlakuan dapat dilihat

Praktek Pengalaman Lapangan (PPL) adalah semua kegiatan kurikuler yang harus dilakukan dan diikuti oleh mahasiswa praktikan, sebagai pelatihan untuk menerapkan teori yang telah

Hibah pemerintah tanpa syarat yang terkait dengan aset biologis yang diukur pada nilai wajar dikurangi biaya untuk menjual diakui dalam laba rugi ketika, dan hanya ketika,

Pada jarak tersebut juga terdapat fasilitas produksi lain yang perlu dilindungi yaitu pipa manifold, yaitu pipa yang membawa minyak mentah dari sumur yang di

Laju petumbuhan penduduk kabupaten Sukamara adalah yang tertinggi dibandingkan Kabupaten-Kabupaten lainnya, yaitu sebesar 4.01 persen, sedang yang terendah di

kapasitas baru (3800 barrel/hari) hasil dari perhitungan pada kapasitas yang lama (1900 barrel/hari) dijadikan dasar untuk menghitung kebutuhan fuel oil dan fuel