• Tidak ada hasil yang ditemukan

LAPORAN GRAFIKA KOMPUTER INTERAKSI MOU

N/A
N/A
Protected

Academic year: 2017

Membagikan "LAPORAN GRAFIKA KOMPUTER INTERAKSI MOU"

Copied!
36
0
0

Teks penuh

(1)

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

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

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

(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

(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

(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

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

(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;

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

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

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

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

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

(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;

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

(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

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

(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

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

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

(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

Referensi

Dokumen terkait

18 yang menghasilkan polusi tinggi dan selanjutnya ke ekonomi berbasis jasa dengan tingkat polusi rendah dan (2) Penduduk dengan tingkat pendapatan tinggi yang

Merek sebagai Harta Kekayaan yang tidak berwujud (Intangible assets) dapat dijadikan harta bersama apabila didaftarkan selama perkawinan terjadi dan tentunya

Apakah saudara/i menggunakan alas kaki yang tertutup dalam keadaan bersih setiap saat bekerja3.

1. Ketuntasan hasil belajar siswa pada siklus I berada dalam kategori cukup dan belum mencapai standar ketuntasan klasikal yang ditetapkan yaitu 75%. Setelah diadakan

Tulisan ini akan membahas pokok penting gagasan Nietzsche yang berkaitan dengan hakekat manusia, yaitu Will to Power (kehendak untuk berkuasa) yang melandasi ungkapan

Untuk Nasabah dengan profil Otorisasi Tunggal dapat dibatasi dengan satu Pengguna Utama dan satu Pengguna Sekunder dimana Pengguna Sekunder tidak memiliki kemampuan transaksi.

proses, output dan informasi umum lainnya tentang auditi. 2) Menetapkan tujuan audit sementara. Pemahaman yang objektif dan komprehensif dapat. mendukung dan mempertajam tujuan

Keupayaan sistem ini tidak terhad kepada pemaparan peta digital sahaja sebaliknya ia boleh kerja-kerja analisis. Sebagai contoh, pemaparan lokasi monumen bersejarah di sekitar