Anda di halaman 1dari 12

PRAKTIKUM GRAFIKA KOMPUTER PERTEMUAN 9

NIM : 1818073
NAMA : Eldi Pramadhani
MATERI : Transformasi Objek 3 Dimensi
TUGAS : Transformasi Objek 3 Dimensi

2
9.1 Tujuan
1. Praktikkan mampu memahami transformasi objek 3 dimensi.
2. Praktikan mampu memahami fungsi library OpenGL untuk interaksi dengan perangkat.
3. Praktikan mampu membuat transformasi objek 3 dimensi pada Visual Studio
menggunakan library OpenGL.
9.2 Alat dan Bahan
1. Laptop
2. Visual studio 2013
3. OpenGL
4. Modul Grafika Komputer 2020
9.3 Landasan Teori
A. Transformasi 3D
Metode transformasi objek tiga dimensi sangat berbeda dengan objek dua dimensi
karena terdapat sumbu z yang ditambahkan sebagai salah satu acuan untuk memperoleh
posisi koordinat baru
1. Translasi
Dalam tranformasi objek tiga dimensi, translasi adalah pemindahan suatu titik
dari titik P=(x,y,z) ke posisi P=(x’,y’,z’) (Hearn, 1994) dengan menggunakan operasi
matriks :
2. Scalling
Penskalaan dilakukan dengan mengisi tr = (0,0,0) dan matriks M diatur seperti
beikut.

Perubahan ukuran suatu objek diperoleh dengan mengalikan semua titik atau atau
vertex pada objek dengan faktor skala pada masing-masing sumbu (parameter Sx
untuk sumbu x, Sy untuk sumbu y, dan Sz untuk sumbu z).
3. Rotasi
Berbeda dengan rotasi di 2D yang menggunakan 2 titik pusat sebagai pusat
perputaran, rotasi 3D menggunakan 3 sumbu koordinat sebagai pusat perputaran.
Dengan demikian ada 3 macam rotasi yang dapat dilakukan , yaitu: rotasi terhadap
sumbu x, rotasi terhadap sumbu y dan rotasi terhadap sumbu z.
B. Fungsi interaksi dengan perangkat
1. Konsep input keyboard
glutKeyboardFunc adalah suatu fungsi callback untuk digunakan sebagai
masukan pada suatu jendela window. Konsepnya pada saat seorang user atau
pengguna memberikan input yaitu menekan pada tombol keyboard, setiap tombol
keyboard yang ditekan akan menghasilkan suatu karakter ASCII yang akan
menghasilkan suatu callback keyboard yang telah didefinisikan berupa fungsi dengan
3 parameter.
Penggunaan input keyboard pada tombol-tombol biasa atau normal key (a-z, 1-0),
dapat dilakukan dengan menggunakan callback function berupa
glutKeyboardFunc(myKeyboard) dengan dideklarasikan terlebih dahulu suatu fungsi
buatan untuk menampung semua perintah input yang
akan digunakan oleh user. Fungsi buatan tersebut seperti contoh di bawah ini:

void myKeyboard(unsigned char key, int x,int y)


{
// masukkan perintah disini
}
Fungsi tersebut berisi suatu perintah yang akan digunakan dalam pengoperasian
program oleh user. Di dalam fungsi tersebut terdapat 3 parameter dan di dalamnya
dideklarasikan suatu perintah yang nantinya akan digunakan.
Sintaks tersebut adalah sintak dasar yang digunakan, untuk bisa menggunakan
input keyboard maka harus diberikan callback function untuk memanggilnya. Sintaks
ini harus disertakan pada fungsi main.

glutKeyboardFunc(myKeyboard);
glutTimerFunc(30,timer,0);

2. Konsep input keyboard special key


GlutSpecialFunc merupakan suatu fungsi callback pada opengl yang digunakan
untuk mengaktifkan tombol-tombol khusus pada keyboard sehingga dapat digunakan
untuk berinteraksi antara user dengan objek yang ada di dalam display opengl.
Pendeklarasiannya adalah

void glutSpecialFunc (void (* func) (int key, int x, int y))

Callback keyboard khusus dipicu ketika keyboard fungsi atau tombol special yang
dideklarasikan ditekan. Parameter callback kunci adalah GLUT_KEY_tombol
khusus.. Parameter x dan y mengindikasikan koordinat relatif jendela ketika tombol
ditekan.
3. Konsep mouse pada GLUT
Dalam konsep mouse pada glut ada beberapa fungsi dasar dan inisialisasi yang
digunakan untuk melakukan interaksi mouse. Adapun penjelasannya adalah sebagai
berikut :
a. Fungsi dasar pembuatan interaksi dengan menggunakan MouseFunction

GLUTAPI void APIENTRY glutMouseFunc(void (GLUTCALLBACK *func)


(int button, int state, int x, int y));

Paramater func adalah fungsi yang akan ditangani dengan event klik mouse.

GLUTAPI void APIENTRY glutMotionFunc(void *func(int x, int y));


Fungsi di atas adalah fungsi pelengkap dari fungsi interaksi mouse untuk
mendeteksi gerakan mouse.
b. Inisialisasi dalam penggunaan MouseFunction

void mouse(int button, int state, int x,int y)


{ if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
drawDot(x,480-y);
if(button==GLUT_RIGHT_BUTTON && state==GLUT_DOWN)
drawDot2(x,480-y);
if(button==GLUT_MIDDLE_BUTTON && state==GLUT_DOWN)
drawDot3(x,480-y);
}
void motion(int x,int y){
}

Dalam penerapan interaksi mouse pada open gl / glut, Fungsi inisialisasinya


adalah sebagai berikut :
1. GLUT_LEFT_BUTTON
Fungsi inisialisasi ini bertujuan untuk inisialisasi button mouse kiri. Jadi
apabila kita ingin mengaktifkan fungsi penggunaan dari button mouse sebelah kiri
maka bisa menggunakan fungsi inisialisasi ini.
2. GLUT_RIGHT_BUTTON
Fungsi inisialisasi ini bertujuan untuk inisialisasi button mouse kanan. Jadi
apabila kita ingin mengaktifkan fungsi penggunaan dari button mouse sebelah
kanan maka bisa menggunakan fungsi inisialisasi ini.
3. GLUT_MIDDLE_BUTTON
Fungsi inisialisasi ini bertujuan untuk inisialisasi button mouse tengah.
Jadi apabila kita ingin mengaktifkan fungsi penggunaan dari button mouse tengah
maka bisa menggunakan fungsi inisialisasi ini.
4. GLUT_DOWN
Fungsi inisialisasi ini adalah untuk inisialisasi ketika tombol mouse ditekan.
5. GLUT_UP
Fungsi inisialisasi ini adalah untuk inisialisasi ketika tombol mouse
dilepaskan. Kemudian pada main program perlu menambahkan fungsi untuk
callback fungsi MouseFunction. glutMouseFunc(mouse);
glutMotionFunc(motion);
9.4 Langkah Langkah Tugas
Membuat transformasi objek 3 dimensi

1. Source code main.cpp


#include <stdlib.h>
#include <glut.h>
#include <windows.h>

int w = 800, h = 600, zt = -20, yt = 0, xt = 0;


int x1 = 0, y1 = 0, z1 = 0, sudut = 0;

void renderScene(void) {
static float alpha = 0;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0, 0, 0, 0);
glLoadIdentity();
glTranslatef(xt, yt, zt);
glRotatef(sudut, x1, y1, z1);
glRotatef(alpha, 1, 1, 1);
glColor3f(0, 1, 1);
glutWireCone(2, 4, 25, 25);//fungsi kerucut
glColor3f(1, 0, 0);
glutSwapBuffers();
}

void resize(int w1, int h1) {


glViewport(0, 0, w1, h1);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, (float)w1 / (float)h1, 1.0, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void Keyboard(GLubyte key, GLint x, GLint y) {


//translasi
if (key == 'a' || key == 'A') xt -= 2;
if (key == 'd' || key == 'D') xt += 2;
if (key == 'w' || key == 'W') yt += 2;
if (key == 's' || key == 'S') yt -= 2;
//rotasi
if (key == 'x' || key == 'X') {
x1 = 1;
y1 = 0;
z1 = 0;
sudut += 10;
}
if (key == 'y' || key == 'Y') {
x1 = 0;
y1 = 1;
z1 = 0;
sudut += -10;
}
if (key == 'z' || key == 'Z') {
x1 = 0;
y1 = 0;
z1 = 1;
sudut += -10;
}
}

void mySpecialKeyboard(int key, int x, int y) {


//scalling
switch (key) {
case GLUT_KEY_UP:
zt += 2;
break;
case GLUT_KEY_DOWN:
zt -= 2;
break;
}
}

void timer(int value) {


glutPostRedisplay();
glutTimerFunc(1, timer, 0);
}

void main(int argc, char **argv) {


glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(w, h);
glutCreateWindow("Eldi Pramadhani - 1818073");
gluOrtho2D(-w / 2, w / 2, -h / 2, h / 2);
glutDisplayFunc(renderScene);
glutReshapeFunc(resize);
glutKeyboardFunc(Keyboard);
glutSpecialFunc(mySpecialKeyboard);
glutTimerFunc(1, timer, 0);
glutMainLoop();
}
2. Tampilan Hasil :

Gambar 9.1 Bentuk Objek 3d

Gambar 9.2 Melakukan Rotasi


Gambar 9.3 Melakukan Translasi

Gambar 9.4 Melakukan Scalling


3. Analisa :
Pada program ini terdapat method main yang didalam nya ada method
glutDisplayFunc dengan argumen renderscene yang digunakan untuk membuat objek
3 dimensi dan fungsi yang dipanggil untuk melakukan transformasi. Lalu ada Method
Keyboard yang digunakan untuk mengubah bentuk objek 3d, Lalu ada method
mySpecialKeyboard yang digunakan untuk mengubah objek dengan nilai Glut.

Tabel 9.1 Fungsi OpenGL


Fungsi Pengertian Contoh Penggunaan
glKeboardFunc Callback function untuk memanggil glutKeyboardFunc(my
Keyboard);
fungsi input keyboard general button.

glutWireCone(); Fungsi yang digunakan untuk glutWireCone(2, 4,


25, 25);//
membuat objek 3 dimensi berbentuk
kerucut.

glRotatef() Fungsi ini digunakan untuk glRotatef(alpha, 1,


1, 1);
melakukan transformasi rotasi pada
objek 3 dimensi.

glTranslatef(); Fungsi OpenGL yang digunakan glTranslatef(xt, yt,


zt);
untuk melakukan transformasi
translasi pada objek 3 dimensi .
9.5 Kesimpulan
1. Metode transformasi objek tiga dimensi sangat berbeda dengan objek dua dimensi karena
terdapat sumbu z yang ditambahkan sebagai salah satu acuan untuk memperoleh posisi
koordinat baru
2. Translasi adalah pemindahan suatu titik dari titik P=(x,y,z) ke posisi P=(x’,y’,z’) (Hearn,
1994)
3. Berbeda dengan rotasi di 2D yang menggunakan 2 titik pusat sebagai pusat perputaran,
rotasi 3D menggunakan 3 sumbu koordinat sebagai pusat perputaran.

Nilai Asisten Lab

Anda mungkin juga menyukai