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
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) Kemudian, di simpan lagi ( di eksport ) dalam format .obj agar dapat di load pada pemanggilan objek script openGlut.
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
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; }
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();
}
Tampilan awal
Key Up
Key left
Tombol a
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
#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
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();