Anda di halaman 1dari 6

LAPORAN PRAKTIKUM

GRAFIKA KOMPUTER
MODUL 5
“INTERAKSI OBJEK 2D (MOUSE FUNCTION)”

PENYUSUN :

TRISNA CHANDRA LAKSANA


180535632566
S1 TI 2018

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 TEKNIK INFORMATIKA 2018
MARET 2020
1. Buatlah program yang dapat mengubah skala objek secara interaktif menggunakan interaksi drag.
Ketika tombol kiri ditekan maka posisi x dan y disimpan dalam variabel global, jika drag
dilakukan maka jarak pointer terhadap posisi yang disimpan sebelumnya akan menyebabkan
perubahan skala secara interaktif (menjauh = membesar, mendekat = mengecil).

Source Code
#include <GL/glut.h>
#endif

#include <stdlib.h>

int w=480, h=480, count=0, flag=1;


float x=0, y=0, z=0, x1=0, y1=0, x2=0, y2=0;
void drawQuad(){
glBegin(GL_POLYGON);
glColor3f(1.,1.,0.);
glVertex2i(-30,-10);
glVertex2i(20,-10);
glVertex2i(20,10);
glVertex2i(-30,10);
glEnd();
}
void myDisplay(void){
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(x,y,z);
drawQuad();
glPopMatrix();
glFlush();
}
void mouse(int button, int state, int xmouse, int ymouse){
if(button==GLUT_RIGHT_BUTTON && state==GLUT_DOWN){
count++;
if(count==2 && flag==1){
glScalef(1.5,1.5,0);
flag=2;
count=0;
}
else if(count==2 && flag==2){
glScalef(0.75,0.75,0);
flag=1;
count=0;
}
}
}
void update(int value){
glutPostRedisplay();
glutTimerFunc(50,update,0);
}
void motion(int xmouse, int ymouse){
x2=xmouse-x1;
y2=ymouse-y1;
if(x2>=0 && y2>=0){
glScalef(1.1,1.1,0);
}
else if(x2<=0 && y2<=0){
glScalef(0.9,0.9,0);
}
x1=xmouse;
y1=ymouse;
}
int main(int argc, char **argv){
glutInit (&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA );
glutInitWindowPosition(100,100);
glutInitWindowSize(w,h);
glutCreateWindow("Tugas Modul 5");
gluOrtho2D(-w/2,w/2,-h/2,h/2);
glutDisplayFunc(myDisplay);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutTimerFunc(50,update,0);
glutMainLoop();
}

Hasil
Penjelasan
Program ini dapat mengubah skala objek secara interaktif menggunakan interaksi drag. Ketika
tombol kanan ditekan dan didrag maka objek akan membesar dan mengecil sesuai dengan arah
kursor mouse. Ketika kursor mouse menjauh maka objek akan menjadi semakin besar, sebaliknya
jika kursor mouse mendekat ke arah objek maka objek akan semakin mengecil.

2. Buatlah program untuk deteksi DOUBLE CLICK, ketika DOUBLE CLICK object yang dipilih
skalanya menjadi 1.5, sedangkan untuk DOUBLE CLICK berikutnya Ukuran object tersebut
kembali seperti semula. Buatlah Kesimpulan dan Algoritmanya.

Source Code
float x=1,y=1,z=0;
int flag=0,flg;
void drawQuad() {
glBegin(GL_QUADS);
glColor3f(0,1,0);
glVertex2f(-30,-30);
glVertex2f(30,-30);
glVertex2f(30,30);
glVertex2f(-30,30);
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=1.5;
y=1.5;
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);
}
int main (int argc, char **argv){
glutInit(&argc, argv);
glutInitWindowPosition(100,100);
glutInitWindowSize(480, 480);
glutCreateWindow("Tugas 2 modul 5");
gluOrtho2D(-100, 100,-100, 100);
glutDisplayFunc(renderScene);
glutMouseFunc(mouse);
glutTimerFunc(1,timer,0);
glutMainLoop();
}

Hasil
Penjelasan
Fungsi dari program ini adalah untuk membuat agar objek berinteraksi dengan mouse
Ketika mouse di klik dua kali makan objek akan membesar 1.5 dan objek akan kembali seperti
semula ketika di klik lagi dua kali
Fungsi unutk mendefinisikan double click terdapat pada fungsi mouse. Pada fungsi ini terdapat
fungsi counter increment untuk membuat objek menjadi lebih besar atau menjadi lebih kecil

Anda mungkin juga menyukai