LAPORAN GRAFIKA KOMPUTER INTERAKSI MOU
LAPORAN PRAKTIKUM
GRAFIKA KOMPUTER
MODUL 4
“Interaksi dengan Keyboard dan Mouse”
dibimbing oleh Bapak Heru Wahyu Herwanto, S.T, M.KOM
PENYUSUN :
Ananda Putri Syaviri
( 130533608243 )
S1 PTI – B 2013
UNIVERSITAS NEGERI MALANG
FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA 2013 B
MARET 2015
(2)
A. TUJUAN
Memahami prinsip-prinsip deteksi input berupa interaksi dari keyboard.
Membuat objek 2D yang dikendalikan dengan keyboard.
Memahami prinsip-prinsip pembuatan interaksi objek 2D menggunakan mouse.
Membuat interaksi objek 2D menggunakan mouse.
B. DASAR TEORI
INTERAKSI KEYBOARD
1. Fungsi dasar pembuatan animasi dengan menggunakan
KeyboardFunction
GLUTAPI void APIENTRY glutKeyboardFunc(void (GLUTCALLBACK
*func)(unsigned char key, int x, int y));
Dalam penggunaan glutKeyboardFunc dimungkinkan untuk mendeteksi input dari
keyboard. Fungsi ini diletakkan pada fungsi main dari program, dan parameternya
adalah callback function yang telah didefinisikan berupa fungsi dengan 3 parameter,
seperti contoh di bawah ini.
void myKeyboard(unsigned char key, int x, int y){
if(key == 'a') glTranslatef(4,0,0); //seleksi tombol yang ditekan }
void mySpecialKeyboard(int key, int x, int y){ switch(key){ case GLUT_KEY_
???
: …; break;}
}
Agar fungsi keyboard ini dapat dideteksi terus maka fungsi untuk
animasi (update)
harus telah disertakan
.
Untuk fungsi callback yang memanggil tombol keyboard normal/biasa adalah
glutKeyboardFunc(myKeyboard); //hanya memanggil fungsi myKeyboard
sedangkan untuk mendeteksi tombol-tombol keyboard yang bersifat spesial seperti
tombol F1, arah panah, Home, Enter, dsb dapat menggunakan callback function
glutSpecialFunc(mySpecialKeyboard);
//hanya
memanggil
fungsi
(3)
INTERAKSI MOUSE
1. 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.
2. 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){
}
GLUT_LEFT_BUTTON untuk inisialisasi button mouse kiri.
GLUT_RIGHT_BUTTON untuk inisialisasi button mouse kanan.
GLUT_MIDDLE_BUTTON untuk inisialisasi button mouse tengah.
Fungsi dari GLUT_DOWN adalah untuk inisialisasi ketika tombol mouse ditekan.
Fungsi dari GLUT_UP adalah untuk inisialisasi ketika tombol mouse dilepaskan.
(4)
Kemudian pada main program perlu menambahkan fungsi untuk callback fungsi
MouseFunction.
glutMouseFunc(mouse);
glutMotionFunc(motion);
C. JOBSHEET PRAKTIKUM
(INTERAKSI KEYBOARD)
LATIHAN 1
Syntax Program
#include<stdlib.h> #include<glut.h> void Persegi() {
glBegin(GL_QUADS); glVertex2d(0,0); glVertex2d(0,50); glVertex2d(80,50); glVertex2d(80,0); glEnd(); }
void Display() { glClear (GL_COLOR_BUFFER_BIT); glColor3f(0,0,1); Persegi(); glFlush(); }
void myKeyboard(unsignedchar key, int x, int y) {
if (key == 'a')
glTranslatef (-4, 0, 0);
elseif (key == 'd')
glTranslatef (4, 0, 0); }
void timer (int value) {
glutPostRedisplay(); glutTimerFunc(10,timer,0); }
void update (int value) {
glutPostRedisplay();
glutTimerFunc(50, update,0); }
void main (int argc, char **argv) {
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100);
(5)
glutInitWindowSize (640,480);
glutCreateWindow ("LATIHAN INTERAKSI KEYBOARD"); gluOrtho2D(-250., 250., -250., 250.);
glutDisplayFunc(Display); glutTimerFunc(1000,timer,0); glutKeyboardFunc(myKeyboard);
//glutSpecialFunc(mySpecialKeyboard);
glutMainLoop(); }
Screen Shoot Hasil Program
tampilan awal
tekan keyboard a
tekan keyboard d
Penjelasan
-
Program diatas merupakan program interaksi keyboard yang diterapkan dalam
objek persegi, dengan alur kerjanya , jika menekan keyboard a maka objek akan
bergeser kearah kiri, dan jika menekan keyboard d maka objek akan bergeser kea
rah kanan. Menggunakan fungsi display untuk menampilkan objek dengan warna
biru ( kode 001). Kemudian menggunakan fungsi myKeyboard yang digunakan
(6)
untuk penedeklarasian fungsi keyboard a dan d , dengan perkondisian if. Jika key
== a maka menggunakan fungsi translate dengan parameter -4,0,0 yang artinya
bergerak ke arah x= -4 , y=0 dan z=0. Jika key ==d maka di translate dengan
parameter 4,0,0 yang artinya bergerak kea rah x=4, y=0, dan z=0. Untuk
memanggil fungsi keybard menggunakan “glutKeyboardFunc(myKeyboard)”.
LATIHAN 2
Syntax Program
#include<stdlib.h> #include<glut.h> void Persegi() {
glBegin(GL_QUADS); glVertex2d(0,0); glVertex2d(0,30); glVertex2d(80,30); glVertex2d(80,0); glEnd(); }
void Display() { glClear (GL_COLOR_BUFFER_BIT); glColor3f(0,0,1); Persegi(); glFlush(); }
void myKeyboard(unsignedchar key, int x, int y) {
if (key == 'a')
glTranslatef (-4, 0, 0);
elseif (key == 'd')
glTranslatef (4, 0, 0);
elseif (key == 's')
glTranslatef (0,-4,0); }
void timer (int value) {
glutPostRedisplay(); glutTimerFunc(10,timer,0); }
void update (int value) {
glutPostRedisplay();
glutTimerFunc(50, update,0); }
void main (int argc, char **argv) {
glutInit (&argc, argv);
(7)
glutInitWindowPosition(100,100); glutInitWindowSize (640,480);
glutCreateWindow ("LATIHAN INTERAKSI KEYBOARD"); gluOrtho2D(-250., 250., -250., 250.);
glutDisplayFunc(Display); glutTimerFunc(1000,timer,0); glutKeyboardFunc(myKeyboard);
//glutSpecialFunc(mySpecialKeyboard);
glutMainLoop(); }
Screen Shoot Hasil Program
tampilan awal
tekan keyboard s
Penjelasan
-
Program diatas sama seperti program sebelumnya, hanya saja ada tambahan
fungsi jika menekan keyboard s, maka objek akan bergeser kearah bawah ( dengan
parameter 0, -4, 0 yang artinya bergerak kea rah x=0 , y=-4, z=0). Sama seperti
program latiahan 1 menggunakan keyboard a dan d , jika menekan keyboard a
maka objek akan bergeser kearah kiri, dan jika menekan keyboard d maka objek
akan bergeser kea rah kanan. Menggunakan fungsi display untuk menampilkan
objek dengan warna biru ( kode 001). Kemudian menggunakan fungsi
myKeyboard yang digunakan untuk penedeklarasian fungsi keyboard a dan d ,
dengan perkondisian if. Jika key == a maka menggunakan fungsi translate dengan
parameter -4,0,0 yang artinya bergerak ke arah x= -4 , y=0 dan z=0. Jika key ==d
maka di translate dengan parameter 4,0,0 yang artinya bergerak kea rah x=4, y=0,
(8)
dan z=0. Untuk memanggil fungsi keybard menggunakan
“glutKeyboardFunc(myKeyboard)”.
LATIHAN 3
Syntax Program
#include<stdlib.h> #include<glut.h> void Persegi() {
glBegin(GL_QUADS); glVertex2d(0,0); glVertex2d(0,50); glVertex2d(80,50); glVertex2d(80,0); glEnd(); }
void Display() { glClear (GL_COLOR_BUFFER_BIT); glColor3f(0,0,1); Persegi(); glFlush(); }
void myKeyboard(unsignedchar key, int x, int y) {
if (key == 'a')
glTranslatef (-4, 0, 0);
elseif (key == 'd')
glTranslatef (4, 0, 0); }
void mySpecialKeyboard (int key, int x, int y) {
switch(key) {
case GLUT_KEY_LEFT : glRotatef(4,0,0,1);
break; }
}
void timer (int value) {
glutPostRedisplay(); glutTimerFunc(10,timer,0); }
void update (int value) {
glutPostRedisplay();
glutTimerFunc(50, update,0); }
void main (int argc, char **argv) {
(9)
glutInitDisplayMode (GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100);
glutInitWindowSize (640,480);
glutCreateWindow ("LATIHAN INTERAKSI KEYBOARD"); gluOrtho2D(-250., 250., -250., 250.);
glutDisplayFunc(Display); glutTimerFunc(1000,timer,0); glutKeyboardFunc(myKeyboard); glutSpecialFunc(mySpecialKeyboard);
glutMainLoop(); }
Screen Shoot Hasil Program
tampilan awal
tekan keyboar navigasi kiri.
Penjelasan
-
Program diatas sama dengan latihan 1, hanya menambahkan fungsi
specialKeyboard menggunakan keyboard navigasi kiri untuk memutar objek
kearah kiri dengan menggunakan fungsi rotate berparameter (4,0,01) dan jika
menekan keyboard a maka objek akan bergeser kearah kiri, dan jika menekan
keyboard d maka objek akan bergeser kea rah kanan. Menggunakan fungsi display
untuk menampilkan objek dengan warna biru ( kode 001). Kemudian
menggunakan fungsi myKeyboard yang digunakan untuk pendeklarasian fungsi
keyboard a dan d , dengan perkondisian if. Jika key == a maka menggunakan
fungsi translate dengan parameter -4,0,0 yang artinya bergerak ke arah x= -4 , y=0
dan z=0. Jika key ==d maka di translate dengan parameter 4,0,0 yang artinya
bergerak kea rah x=4, y=0, dan z=0. Untuk memanggil fungsi keybard
(10)
menggunakan “glutKeyboardFunc(myKeyboard);”. Untuk memanggil fungsi
special Keyboard dengan menggunakan “glutSpecialFunc(mySpecialKeyboard)”.
LATIHAN 4
Syntax Program
#include<stdlib.h> #include<glut.h> void Persegi() {
glBegin(GL_QUADS); glVertex2d(0,0); glVertex2d(0,50); glVertex2d(80,50); glVertex2d(80,0); glEnd(); }
void Display() { glClear (GL_COLOR_BUFFER_BIT); glColor3f(0,0,1); Persegi(); glFlush(); }
void myKeyboard(unsignedchar key, int x, int y) {
if (key == 'a')
glTranslatef (-4, 0, 0);
elseif (key == 'd')
glTranslatef (4, 0, 0); }
void mySpecialKeyboard (int key, int x, int y) {
switch(key) {
case GLUT_KEY_LEFT : glRotatef(4,0,0,1);
break;
case GLUT_KEY_RIGHT : glRotatef(-4,0,1,0);
break; }
}
void timer (int value) {
glutPostRedisplay(); glutTimerFunc(10,timer,0); }
void update (int value) {
glutPostRedisplay();
glutTimerFunc(50, update,0); }
(11)
void main (int argc, char **argv) {
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100);
glutInitWindowSize (640,480);
glutCreateWindow ("LATIHAN INTERAKSI KEYBOARD"); gluOrtho2D(-250., 250., -250., 250.);
glutDisplayFunc(Display); glutTimerFunc(1000,timer,0); glutKeyboardFunc(myKeyboard); glutSpecialFunc(mySpecialKeyboard);
glutMainLoop(); }
Screen Shoot Hasil Program
tampilan awal
tekan keyboard navigasi kiri
tekan keyboard navigasi kanan
(12)
-
Program diatas sama seperti program latihan 3 , hanya saja menambahkan fungsi
pada keyboard navigasi kanan yang fungsinya mempersempit objek kearah kiri
dengan parameter (-4,0,1,0). Fungsi ini ditambahakan pada fungsi
specialKeyboard.
LATIHAN 5
Syntax Program
#include<stdlib.h> #include<glut.h> void Persegi() {
glBegin(GL_QUADS); glVertex2d(0,0); glVertex2d(0,50); glVertex2d(80,50); glVertex2d(80,0); glEnd(); }
void Display() {
glClear (GL_COLOR_BUFFER_BIT); Persegi();
glFlush(); }
void myKeyboard(unsignedchar key, int x, int y) {
if (key == 'a')
glTranslatef (-4, 0, 0);
elseif (key == 'd')
glTranslatef (4, 0, 0);
elseif (key == 'w')
glTranslatef (0,4,0);
elseif (key == 's')
glTranslatef (0,-4,0);
elseif (key == 'z') glColor3f (1,0,0);
elseif (key == 'x') glColor3f (0,1,0);
elseif (key == 'c') glColor3f (0,0,1);
elseif (key == 'v') glColor3f (0,1,1); }
void mySpecialKeyboard (int key, int x, int y) {
switch(key) {
case GLUT_KEY_LEFT : glRotatef(4,0,0,1);
break;
case GLUT_KEY_RIGHT : glRotatef(-4,0,1,0);
(13)
break; }
}
void timer (int value) {
glutPostRedisplay(); glutTimerFunc(10,timer,0); }
void update (int value) {
glutPostRedisplay();
glutTimerFunc(50, update,0); }
void main (int argc, char **argv) {
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100);
glutInitWindowSize (640,480);
glutCreateWindow ("LATIHAN INTERAKSI KEYBOARD"); gluOrtho2D(-250., 250., -250., 250.);
glutDisplayFunc(Display); glutTimerFunc(1000,timer,0); glutKeyboardFunc(myKeyboard); glutSpecialFunc(mySpecialKeyboard);
glutMainLoop(); }
Screen Shoot Hasil Program
(14)
tekan keyboard w
tekan keyboard z
tekan keyboard x
(15)
tekan keyboard v
Penjelasan
-
Program diatas sama seperti pada program 1 dan 2 , hanya saja menambahkan
fungsi color3f jika menekan keyboard z,x,c,v utnuk merubah warna objek. Jika
menekan keyboard z= merah, x=hijau, c=biru, v=cyan. Untuk merubah warna
objek dapat ditambahkan fungsi glColor3f pada fungsi myKeyboard.
Menggunakan fungsi keyboard a untuk geser kiri, d geser kanan, s geser kebawah
dan w geser keatas.
(INTERAKSI MOUSE)
LATIHAN 1
Syntax Program
#include<stdlib.h> #include<glut.h> int w = 480;
int h = 480;
float x = 0;
float y = 0;
float z = 0;
void Persegi() {
glBegin(GL_QUADS); glColor3f(0,0,1); glVertex2d(0,0); glVertex2d(0,50); glVertex2d(80,50); glVertex2d(80,0); glEnd();
}
void Display() {
glClear (GL_COLOR_BUFFER_BIT); glPushMatrix();
glTranslatef(x,y,z); Persegi();
glPopMatrix(); glFlush(); }
(16)
void mouse(int button, int state, int xmouse, int ymouse) {
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
x = xmouse - (w/2); y = (h/2) - ymouse; }
}
void timer (int value) {
glutPostRedisplay(); glutTimerFunc(10,timer,0); }
void main (int argc, char **argv) {
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100);
glutInitWindowSize (w,h);
glutCreateWindow ("LATIHAN INTERAKSI MOUSE"); gluOrtho2D(-w/2, w/2, -h/2, h/2);
glutDisplayFunc(Display); glutTimerFunc(1000,timer,0); glutMouseFunc(mouse);
//glutSpecialFunc(mySpecialKeyboard);
glutMainLoop(); }
Screen Shoot Hasil Program
(17)
Memindahkan objek jika mouse klik.
Penjelasan
-
Program diatas adalah penerapan interaksi pada kouse. Menggunakan fungsi
mouse untuk pengaturan interaksi apa yang terjadi jika mengklik atau kursor
mouse digunakan. Pada program ini menunjukkan jika mengklik mouse pada
posisi sembarang maka objke tersebut akan berpindah sesuai dimana mouse diklik
dengan pengaturan
x= xmouse-(w/2); y=(h/2)-ymouse;yang artinya jika x
berfungsi mengatur posisi sumbu x dari objek ketika mouse di klik dan Y
berfungsi mengatur posisi sumbu y dari objek ketika mouse di klik.
LATIHAN 2
Syntax Program
#include<stdlib.h> #include<glut.h> int w = 480;
int h = 480;
float x = 0;
float y = 0;
float z = 0;
void Persegi() {
glBegin(GL_QUADS); glColor3f(0,0,1); glVertex2d(0,0); glVertex2d(0,50); glVertex2d(80,50); glVertex2d(80,0); glEnd();
}
void Display() {
glClear (GL_COLOR_BUFFER_BIT); glPushMatrix();
(18)
Persegi(); glPopMatrix(); glFlush(); }
void mouse(int button, int state, int xmouse, int ymouse) {
if (button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) {
glScalef(2,2,1); }
elseif (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
glScalef(0.5,0.5,1); }
}
void timer (int value) {
glutPostRedisplay(); glutTimerFunc(10,timer,0); }
void main (int argc, char **argv) {
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100);
glutInitWindowSize (w,h);
glutCreateWindow ("LATIHAN INTERAKSI MOUSE"); gluOrtho2D(-w/2, w/2, -h/2, h/2);
glutDisplayFunc(Display); glutTimerFunc(1000,timer,0); glutMouseFunc(mouse);
//glutSpecialFunc(mySpecialKeyboard);
glutMainLoop(); }
Screen Shoot Hasil Program
(19)
jika menekan tombol mouse kanan
menekan tombol mouse kiri
Penjelasan
-
Program diatas berfungsi untuk merubah ukuran objke dengan menggunakan
fungsi Scalef dengan parameter, jika ingin merubah objek menjadi semakin besar
(2,2,1) jika ingin mengecilkan ukuran objek dengan parameter (0.5,0.5,1).
Fungsi yang digunakan dengan perkondisian if yang nantinya akan merubah objek
(x,y) menjadi 2kali lebih besar dari ukuran awal (tomol kanan):
if (button == GLUT_RIGHT_BUTTON && state==GLUT_DOWN){ x= xmouse-(w/2);
y=(h/2)-ymouse; glScalef(2,2,2);
digunakan untuk mengatur tombol klik kiri maka ukuran x dan y yang ukurannya
2x lebih kecil dari ukuran awal.
elseif (button == GLUT_LEFT_BUTTON && state==GLUT_UP){ x= xmouse-(w/2);
y=(h/2)-ymouse; glScalef(0.5,0.5,1);
(20)
LATIHAN 3
Syntax Program
#include<stdlib.h> #include<glut.h> int w = 480;
int h = 480;
float x = 0;
float y = 0;
float z = 0;
void Persegi() {
glBegin(GL_QUADS); glColor3f(0,0,1); glVertex2d(0,0); glVertex2d(0,50); glVertex2d(80,50); glVertex2d(80,0); glEnd(); }
void Display() { glClear (GL_COLOR_BUFFER_BIT); glPushMatrix(); glTranslatef(x,y,z); Persegi(); glPopMatrix(); glFlush(); }
void mouse(int button, int state, int xmouse, int ymouse) {
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
glScalef(2,2,1); }
elseif (button == GLUT_RIGHT_BUTTON && state == GLUT_UP) {
glScalef(0.5,0.5,1); }
}
void timer (int value) {
glutPostRedisplay(); glutTimerFunc(10,timer,0); }
void main (int argc, char **argv) {
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100);
glutInitWindowSize (w,h);
(21)
gluOrtho2D(-w/2, w/2, -h/2, h/2); glutDisplayFunc(Display);
glutTimerFunc(1000,timer,0); glutMouseFunc(mouse);
//glutSpecialFunc(mySpecialKeyboard);
glutMainLoop(); }
Screen Shoot Hasil Program
tampilan awal
jika menekan tombol mouse kiri
(22)
Penjelasan
-
Program diatas sama seperti program latihan 2 namun kebalikannya. Berfungsi
untuk merubah ukuran objek dengan menggunakan fungsi Scalef dengan
parameter, jika ingin merubah objek menjadi semakin besar (2,2,1) jika ingin
mengecilkan ukuran objek dengan parameter (0.5,0.5,1).
Fungsi yang digunakan dengan perkondisian if yang nantinya akan merubah objek
(x,y) menjadi 2kali lebih besar dari ukuran awal (tomol kiri):
if (button == GLUT_LEFT_BUTTON && state==GLUT_DOWN){ x= xmouse-(w/2);
y=(h/2)-ymouse; glScalef(2,2,2);
digunakan untuk mengatur tombol klik kanan maka ukuran x dan y yang
ukurannya 2x lebih kecil dari ukuran awal.
elseif (button == GLUT_RIGHT_BUTTON && state==GLUT_UP){ x= xmouse-(w/2);
y=(h/2)-ymouse; glScalef(0.5,0.5,1);
LATIHAN 4
Syntax Program
# include<glut.h> #include<stdio.h> float x=0, y=0, z=0;
int w=480;
int h=480;
void drawQuad(void) { glBegin(GL_QUADS); glVertex2f(0.,0.); glVertex2f(0.,100.); glVertex2f(200.,100.); glVertex2f(200.,0.); glEnd();
}
void myDisplay(void) {
glClear(GL_COLOR_BUFFER_BIT); glPushMatrix();
glTranslatef(x,y,z); drawQuad(); glPopMatrix(); glFlush(); }
(23)
void mouse(int button, int state, int xmouse, int ymouse) {
if (button == GLUT_RIGHT_BUTTON && state==GLUT_DOWN){ x= xmouse-(w/2);
y=(h/2)-ymouse; glScalef(2,2,2); }
elseif (button == GLUT_RIGHT_BUTTON && state==GLUT_UP){ x= xmouse-(w/2);
y=(h/2)-ymouse; glScalef(0.5,0.5,0.5); }
}
void update(int value) {
glutPostRedisplay();
glutTimerFunc(50,update,0); }
void main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100);
glutInitWindowSize(w,h);
glutCreateWindow("Gesta Wahyu sasongko"); gluOrtho2D(-100,100,-100,100);
glutDisplayFunc(myDisplay); glutTimerFunc(50,update,0); glutMouseFunc(mouse); glutMainLoop();}
Screen Shoot Hasil Program
(24)
Jika menekan tombl mouse kiri maka akan merubah objek menjadi kecil,
tombol mouse kanan untuk merubah objek menjadi besar, namun perubahan
skalanya kearah pointer mouse.
Penjelasan
mouse
OPEN GL
Untuk open GL, objek akan terletak pada koordinat 0,0 terletak (tengah window),
sedangkan untuk mouse koordinat 0,0 terletak pada dimana posisi pointer mouse
diletakkan, sehingga tidak secara otomatis berada pad tengah window yang
digunakan seperti pada open GL.
LATIHAN 5
(25)
#include<stdlib.h> #include<glut.h> int w = 480;
int h = 480;
float x = 0;
float y = 0;
float z = 0;
void Persegi() {
glBegin(GL_QUADS); glColor3f(0,0,1); glVertex2d(0,0); glVertex2d(0,50); glVertex2d(80,50); glVertex2d(80,0); glEnd(); }
void Display() { glClear (GL_COLOR_BUFFER_BIT); glPushMatrix(); glTranslatef(x,y,z); Persegi(); glPopMatrix(); glFlush(); }
void mouse(int button, int state, int xmouse, int ymouse) {
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
x = xmouse - (w/2); y = (h/2) - ymouse; }
}
void motion (int xmouse, int ymouse) {
x=xmouse-(w/2); y=(h/2)-ymouse; }
void timer (int value) {
glutPostRedisplay(); glutTimerFunc(10,timer,0); }
void main (int argc, char **argv) {
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100);
glutInitWindowSize (w,h);
glutCreateWindow ("LATIHAN INTERAKSI MOUSE"); gluOrtho2D(-w/2, w/2, -h/2, h/2);
glutDisplayFunc(Display); glutTimerFunc(1000,timer,0);
(26)
glutMouseFunc(mouse);
//glutSpecialFunc(mySpecialKeyboard);
glutMotionFunc(motion); glutMainLoop();
}
Screen Shoot Hasil Program
Penjelasan
-
Program diatas menggunakan fungsi motion yang berfungsi mengatur letak objek
berdasarkan posisi mosue diletakkan/diklik. Sama seperti pada latihan 1, bedanya
hanya ketika objek diklik dan ditahan maka objek akan ikut berpindah dengan
pergerakan pointer mouse.
D. TUGAS ASISTENSI
TUGAS ASISTENSI 1
Syntax Program
#include<stdlib.h> #include<glut.h> void drawQuad(void){
glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES);
glColor3f(1,0,0); glVertex2f(0.,100.); glVertex2f(80.,0.); glVertex2f(-80.,0.); glColor3f(1,1,1); glVertex2f(0.,-100.); glVertex2f(80.,0.); glVertex2f(-80.,0.); glEnd();
glFlush(); }
(27)
void renderScene(){
glClear(GL_COLOR_BUFFER_BIT); drawQuad();
glFlush(); }
void myKeyboard(unsignedchar key, int x, int y) {
if (key == 'k') glRotatef (4,0,0,1);
elseif (key == 'l') glRotatef (-4,0,0,1); }
void update(int value){ glutPostRedisplay();
glutTimerFunc(60,update,0); }
void main(int argc, char **argv) { glutInit (&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA) ; glutInitWindowPosition(100,100);
glutInitWindowSize(480,480);
glutCreateWindow("ASISTENSI 1 SYAVIRI"); gluOrtho2D(-320.,320.,-320.,320.0); glutDisplayFunc(renderScene); glutKeyboardFunc(myKeyboard); glutTimerFunc(60, update, 0); glutMainLoop();
}
Screen Shoot Hasil Program
(28)
tekan keyboard k
tekan keyboard l
Penjelasan
-
Pada program diatas menggunakan fungsi triangle untuk membuat dua buah objek
berwarna merah dan putih , yang dideklarasikan pada fungsi drawQuad.
Kemudian untuk mengubah posisi objek menggunakan fungsi myKeyboard yang
didalamnya dideklarasikan jika menekan tombol k dan l akan dirotatef sesuai
dengan parameter masing- masing, untuk tombol k kearah kiri , tombol l kearah
kanan.
TUGAS ASISTENSI 2
Syntax Program
#include<stdlib.h> #include<glut.h> int a, p, j, n;
void drawQuad(){ glBegin(GL_QUADS);
(29)
glColor3f(0, 0, 1); glVertex2i(0, 0); glVertex2i(0, 95); glVertex2i(-95, 95); glVertex2i(-95, 0); glEnd(); }
void myKeyboard(unsignedchar key, int x, int y){
if (key == 'A' || key == 'a') { a -= 3;
}
elseif (key == 'J' || key == 'j'){ p -= 3;
}
elseif (key == 'N' || key == 'n'){ a += 3;
}
elseif (key == 'P' || key == 'p'){ p += 3;
} }
void drawSegitiga(){ glBegin(GL_TRIANGLES); glColor3f(0, 1, 1); glVertex2f(100.,100.); glVertex2f(150.,0.); glVertex2f(50.,0.); glEnd();
}
void mySpecialKeyboard(int key, int x, int y){
switch (key){
case GLUT_KEY_LEFT: j -= 3;
break;
case GLUT_KEY_RIGHT: j += 3;
break;
case GLUT_KEY_UP: n += 3;
break;
case GLUT_KEY_DOWN: n -= 3;
break; }
}
void renderScene(){
glClear(GL_COLOR_BUFFER_BIT); glPushMatrix();
glTranslatef(a, p, 0); drawQuad();
glPopMatrix(); glPushMatrix(); glTranslatef(j, n, 0); drawSegitiga(); glPopMatrix(); glFlush(); }
(30)
void update(int value){ glutPostRedisplay();
glutTimerFunc(50, update, 0); }
void main(int argc, char **argv) { glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
glutCreateWindow("ASISTENSI 2 SYAVIRI"); gluOrtho2D(-220.0, 220.0, -200.0, 200.0); glutTimerFunc(50, update, 1);
glutDisplayFunc(renderScene); glutKeyboardFunc(myKeyboard); glutSpecialFunc(mySpecialKeyboard); glutMainLoop();
}
Screen Shoot Hasil Program
tampilan awal
posisi kedua objek setelah menekan
keyboard a/p/j/n dan navigasi kiri-kanan-atas-bawah
Penjelasan
-
Program diatas merupakan penerapan dari kombinasi tombol keyboard biasa dan
tombol special keyboard. Untuk mengatur penggunaan tombol keyboard biasa ,
menggunakan tombol a,p,j,n dideklarasikan pada fungsi myKeyboard. Sedangkan
untuk tombol navigasi keyboard, menggunakan fungsi mySpecialKeyboard untuk
(31)
pendeklarasian fungsi-fungsinya. Menggunakan dua bua objek sebagai contoh
pembuktian hasil program , persegi dan segitiga dengan pendeklarasian warna dan
system koordinat yang digunakan pada fungsi drawQuad untuk persegi dan
drawSegitiga untuk segitiga. Menggunakan fungsi translate untuk perpindahan
objek, kemudian menggunakan fungsi popMatrix dan pushMatrix untuk
menambah modifikasi program diatas.
TUGAS ASISTENSI 3
Syntax Program
#include<stdlib.h> #include<glut.h> #include<stdio.h> int w = 480;
int h = 480;
float a=1;
float b=1;
int c=0;
int d=0;
void draw() { glBegin(GL_QUADS); glVertex2i(0,0); glVertex2i(0,100); glVertex2i(100,100); glVertex2i(100,0); glEnd(); }
void render(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1,1,0); glPushMatrix(); glScalef(a,1,0); glScalef(1,b,0); draw(); glPopMatrix(); glFlush(); }
void timer(int value) {
glutPostRedisplay(); glutTimerFunc(10,timer,0); }
void motion(int x, int y) {
c=x-240; d= -(y-240);
printf("posisi pointer mouse (%d,%d) \n", c, d); }
(32)
void mouse(int button, int state, int xmouse, int ymouse) {
if (button == GLUT_RIGHT_BUTTON && state == GLUT_UP) {
a += c/100; b += d/100; }
}
void main(int argc, char **argv){ glutInit(&argc, argv);
glutInitWindowSize(w,h);
glutCreateWindow("Gesta Wahyu Sasongko"); gluOrtho2D(-w/2,w/2,-h/2,h/2);
glutDisplayFunc(render); glutTimerFunc(100,timer,0); glutMouseFunc(mouse); glutMotionFunc(motion); glutMainLoop();
}
(33)
Penjelasan
-
Program diatas menampilkan posisi mouse pada window yang menampilkan
objek. Ketika pada window objek , mouse diklik, maka pada window lainnya yang
kosong akan muncul informasi mengenai posisi pointer mouse saat mouse diklik.
Posisi mouse akan terbaca jika mouse digerakkan dan di klik. Untuk mendeteksi
pergerakan pointer mouse menggunakan fungsi motion.
(34)
TUGAS ASISTENSI 4
Syntax Program
#include"stdlib.h" #include"stdio.h" #include<conio.h> #include"glut.h" float x=1,y=1,z=0;
int w=480, h=480, flag=0,flg;
void drawQuad() {
glBegin(GL_POLYGON); glColor3f(0,0,1); glVertex2f(-40.,-40.); glVertex2f(40.,-40.); glVertex2f(40.,40.); glVertex2f(-40.,40.); glEnd(); }
void mouse(int button, int state, int xmouse, int ymouse){
if(flg==0){
if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN){ flag++; if(flag==2){ flg=3; x=3; y=3; flag=3; } } }
if (flg==3){
if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN){ flag--; if(flag==0){ x=1; y=1; flg=0; } } } }
void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); glScalef(x,y,z); drawQuad(); glPopMatrix(); glFlush(); }
void timer(int value){ glutPostRedisplay(); glutTimerFunc(50,timer,0); }
void main (int argc, char **argv){ glutInit(&argc, argv);
glutInitWindowPosition(100,100); glutInitWindowSize(w,h);
glutCreateWindow("ASISTENSI 4 SYAVIRI"); gluOrtho2D(-w/2,w/2,-h/2,h/2);
glutDisplayFunc(renderScene); glutMouseFunc(mouse);
(35)
glutTimerFunc(1,timer,0); glutMainLoop();
}
Screen Shoot Hasil Program
tampilan awal
double klik pertama
double klik kedua
Penjelasan
-
Program diatas menggunakan perkondisian if untuk mendeteksi event double klik.
Dideklarasikan dalam fungsi mouse untuk merubah ukuran objek, untuk double
(36)
klik pertama merubah ukuran objek menjadi lebih besar, kemudian untuk double
klik kedua merubah ukuran objke menjadi seperti semula. Jika flag ==0 , maka x
dan y ditamabh 3, jika flag==3 maka x dan y=1 yang artinya kembali pada bentuk
awal.
E. KESIMPULAN
Untuk mendeklarasikan penggunaan tombol keyboard alphabet maka
menggunakan fungsi myKeyboard, karena tombol alphabet merupakan tombol
biasa.
Untuk mendeklarasikan penggunaan tombol navigasi keyboard, menggunakan
fungsi mySpecialKeyboard , karena tombol navigasi merupakan tombol special.
Untuk penggunaan system koordinat openGL , maka posisi objek akan berada
pada dimana pointer mouse tersebut diletakkan.
Sedangkan untuk penggunaan system koorsinat menggunakan fungsi mouse,
maka posisi objek akan berada pada posisi tengah window yang digunakan.
Penggunaan fungsi motion berfungsi untuk menggerakkan objek ketika mengklik
dan menahan , sehingga hasilnya objek tersebut akan ikut bergerak mengikuti
arah pointer mouse.
Untuk merubah posisi objek dapat menggunakan fungsi translatef da
rotatef(memutar), sedangkan untuk mengubah ukuran objek dapat menggunaka
fungsi scalef.
F. DAFTAR PUSTAKA
Modul 4 Praktikum Grafika Komputer 2015. Interaksi dengan Keyboard dan Mouse..
Universitas Negeri Malang. Fakultas Teknik. Jurusan Teknik Elektro
(1)
pendeklarasian fungsi-fungsinya. Menggunakan dua bua objek sebagai contoh pembuktian hasil program , persegi dan segitiga dengan pendeklarasian warna dan system koordinat yang digunakan pada fungsi drawQuad untuk persegi dan drawSegitiga untuk segitiga. Menggunakan fungsi translate untuk perpindahan objek, kemudian menggunakan fungsi popMatrix dan pushMatrix untuk menambah modifikasi program diatas.
TUGAS ASISTENSI 3
Syntax Program
#include<stdlib.h> #include<glut.h> #include<stdio.h> int w = 480;
int h = 480;
float a=1;
float b=1;
int c=0;
int d=0;
void draw() { glBegin(GL_QUADS); glVertex2i(0,0); glVertex2i(0,100); glVertex2i(100,100); glVertex2i(100,0); glEnd(); }
void render(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1,1,0); glPushMatrix(); glScalef(a,1,0); glScalef(1,b,0); draw(); glPopMatrix(); glFlush(); }
void timer(int value) {
glutPostRedisplay(); glutTimerFunc(10,timer,0); }
void motion(int x, int y) {
c=x-240; d= -(y-240);
printf("posisi pointer mouse (%d,%d) \n", c, d); }
(2)
void mouse(int button, int state, int xmouse, int ymouse) {
if (button == GLUT_RIGHT_BUTTON && state == GLUT_UP) {
a += c/100; b += d/100; }
}
void main(int argc, char **argv){ glutInit(&argc, argv);
glutInitWindowSize(w,h);
glutCreateWindow("Gesta Wahyu Sasongko"); gluOrtho2D(-w/2,w/2,-h/2,h/2);
glutDisplayFunc(render); glutTimerFunc(100,timer,0); glutMouseFunc(mouse); glutMotionFunc(motion); glutMainLoop();
}
(3)
Penjelasan
- Program diatas menampilkan posisi mouse pada window yang menampilkan objek. Ketika pada window objek , mouse diklik, maka pada window lainnya yang kosong akan muncul informasi mengenai posisi pointer mouse saat mouse diklik. Posisi mouse akan terbaca jika mouse digerakkan dan di klik. Untuk mendeteksi pergerakan pointer mouse menggunakan fungsi motion.
(4)
TUGAS ASISTENSI 4
Syntax Program
#include"stdlib.h" #include"stdio.h" #include<conio.h> #include"glut.h" float x=1,y=1,z=0;
int w=480, h=480, flag=0,flg;
void drawQuad() {
glBegin(GL_POLYGON); glColor3f(0,0,1); glVertex2f(-40.,-40.); glVertex2f(40.,-40.); glVertex2f(40.,40.); glVertex2f(-40.,40.); glEnd(); }
void mouse(int button, int state, int xmouse, int ymouse){
if(flg==0){
if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN){ flag++; if(flag==2){ flg=3; x=3; y=3; flag=3; } } }
if (flg==3){
if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN){ flag--; if(flag==0){ x=1; y=1; flg=0; } } } }
void renderScene(void){
glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); glScalef(x,y,z); drawQuad(); glPopMatrix(); glFlush(); }
void timer(int value){ glutPostRedisplay(); glutTimerFunc(50,timer,0); }
void main (int argc, char **argv){ glutInit(&argc, argv);
glutInitWindowPosition(100,100); glutInitWindowSize(w,h);
glutCreateWindow("ASISTENSI 4 SYAVIRI"); gluOrtho2D(-w/2,w/2,-h/2,h/2);
glutDisplayFunc(renderScene); glutMouseFunc(mouse);
(5)
glutTimerFunc(1,timer,0); glutMainLoop();
}
Screen Shoot Hasil Program
tampilan awal
double klik pertama
double klik kedua Penjelasan
- Program diatas menggunakan perkondisian if untuk mendeteksi event double klik.
(6)
klik pertama merubah ukuran objek menjadi lebih besar, kemudian untuk double klik kedua merubah ukuran objke menjadi seperti semula. Jika flag ==0 , maka x dan y ditamabh 3, jika flag==3 maka x dan y=1 yang artinya kembali pada bentuk awal.
E. KESIMPULAN
Untuk mendeklarasikan penggunaan tombol keyboard alphabet maka menggunakan fungsi myKeyboard, karena tombol alphabet merupakan tombol biasa.
Untuk mendeklarasikan penggunaan tombol navigasi keyboard, menggunakan fungsi mySpecialKeyboard , karena tombol navigasi merupakan tombol special.
Untuk penggunaan system koordinat openGL , maka posisi objek akan berada pada dimana pointer mouse tersebut diletakkan.
Sedangkan untuk penggunaan system koorsinat menggunakan fungsi mouse, maka posisi objek akan berada pada posisi tengah window yang digunakan.
Penggunaan fungsi motion berfungsi untuk menggerakkan objek ketika mengklik dan menahan , sehingga hasilnya objek tersebut akan ikut bergerak mengikuti arah pointer mouse.
Untuk merubah posisi objek dapat menggunakan fungsi translatef da rotatef(memutar), sedangkan untuk mengubah ukuran objek dapat menggunaka fungsi scalef.
F. DAFTAR PUSTAKA
Modul 4 Praktikum Grafika Komputer 2015. Interaksi dengan Keyboard dan Mouse..