laporan 4 grafkom

31
 INTERAKSI DENGAN KEYBOARD DAN MOUSE LAPORAN PRAKTIKUM IV UNTUK MEMENUHI TUGAS MATA KULIAH Praktikum Grafika Komputer Yang dibina ole !apak Ira"an #"i $a%ono ole &oirul Hida%at '()*((+),'-' PTI A .)'( UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK JURUSAN TEKNIK ELEKTRO PROGRAM STUDI S1 PENDIDIKAN TEKNIK INFORMATIKA Maret 2014

Upload: choirul-hidayat

Post on 04-Feb-2018

235 views

Category:

Documents


0 download

TRANSCRIPT

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 1/31

INTERAKSI DENGAN KEYBOARD DAN MOUSE

LAPORAN PRAKTIKUM IV

UNTUK MEMENUHI TUGAS MATA KULIAH

Praktikum Grafika Komputer 

Yang dibina ole !apak Ira"an #"i $a%ono

ole

&oirul Hida%at'()*((+),'-'

PTI A .)'(

UNIVERSITAS NEGERI MALANG

FAKULTAS TEKNIK JURUSAN TEKNIK ELEKTRO

PROGRAM STUDI S1 PENDIDIKAN TEKNIK INFORMATIKA

Maret 2014

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 2/31

Mod! 4 " I#tera$%& de#'a# Ke()oard da# Mo%e

A* T+a#

'/ Memaami prin0ip1prin0ip detek0i input berupa interak0i dari ke%board/

./ Membuat ob2ek .# %ang dikendalikan dengan ke%board/

(/ Memaami prin0ip1prin0ip pembuatan interak0i ob2ek .# menggunakan

mou0e/

3/ Membuat interak0i ob2ek .# menggunakan mou0e/

B* I#tera$%& Ke()oard

'/ !uatla pro2e4t baru pada 5i0ual Studio dengan nama prak31ke%board'/

!erikut adala fung0ifung0i %ang aru0 ditambakan/ Sediakan fung0i

dra"6uad789 untuk menggambar 0ebua kotak/

a/ S4ript#include <stdlib.h>

#include <glut.h>

void Draw(){

glClear(GL_COLO_!"$_!%&)'

gl!egin(GL_"D*)'

gl+erte,-i(/)'

gl+erte,-i(0/)'gl+erte,-i(0/0)'

gl+erte,-i(/0)'

gl$nd()'

gllush()'

1

int 2 3 '

void dis4la5(){

glClear(GL_COLO_!"$_!%&)'

gl6ush7atri,()'

gl&ranslate8(//2)'

Draw()'gl6o47atri,()'

glut*wa4!u9ers()'

1

void u4date(int value){

glut6ostedis4la5()'

glut&i:erunc(;/u4date/)'

1

void :ain(int argc/ char argv){

glut%nit(=argc/argv)'

glut%nitDis4la57ode(GL"&_D$6& ? GL"&_DO"!L$ ? GL"&_G!)'

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 3/31

glut%nit@indow6osition(0/0)'

glut%nit@indow*i2e(AB/B)'

glutCreate@indow(Choirul ida5at)'

gluOrtho-D(EF-/F-/E-B/-B)'

glut&i:erunc(F/u4date/)'

glutDis4la5unc(dis4la5)'

glut7ainLoo4()'

1

 b/ :utput

./ Modifika0i program pada latian ' dan tambakan program pada fung0i

m%Ke%board 0eingga dapat menggerakkan ob2ek ke ata0; ke ba"a; ke

kanan; dan ke kiri / Tampilkan 0our4e 4oden%a/ !erikan ke0impulan<

a/ S4ript

#include <stdlib.h>

#include <glut.h>

void Draw(){

glClear(GL_COLO_!"$_!%&)'

glClearColor(0/0/0/0)'

gl!egin(GL_"D*)'

glColorF8(//0)'

gl+erte,-i(/)'

glColorF8(0//0)'

gl+erte,-i(0/)'

glColorF8(0/0/)'

gl+erte,-i(0/0)'

glColorF8(/0/0)'

gl+erte,-i(/0)'

gl$nd()'

gllush()'

1

int 2 3 '

void dis4la5(){

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 4/31

glClear(GL_COLO_!"$_!%&)'

gl6ush7atri,()'

gl&ranslate8(//2)'

Draw()'

gl6o47atri,()'

glut*wa4!u9ers()'

1

void :5e5board(unsigned char He5/ int ,/ int 5){

i8  (He5 33 IdI) gl&ranslate8(B//)'

else i8 (He5 33 IaI) gl&ranslate8(EB//)'

1

void u4date(int value){

glut6ostedis4la5()'

glut&i:erunc(;/u4date/)'

1

void :ain(int argc/ char argv){

glut%nit(=argc/argv)'

glut%nitDis4la57ode(GL"&_D$6& ? GL"&_DO"!L$ ?

GL"&_G!)'

glut%nit@indow6osition(0/0)'

glut%nit@indow*i2e(AB/B)'

glutCreate@indow(Choirul ida5at)'

gluOrtho-D(EF-/F-/E-B/-B)'

glut&i:erunc(F/u4date/)'

glutDis4la5unc(dis4la5)'

glute5boardunc(:5e5board)'glut7ainLoo4()'

1

 b/ :utput

(/ !uatla pro2e4t baru pada 5i0ual Studio dengan nama prak31ke%board./

!erikut adala 4ara untuk mendetek0i tombol1tombol ke%board %ang

memiliki fung0i 0pe0ial/ !erikan ke0impulan<

a/ S4ript

#include <stdlib.h>

#include <glut.h>

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 5/31

void Draw(){

glClear(GL_COLO_!"$_!%&)'

glClearColor(0/0/0/0)'

gl!egin(GL_"D*)'

gl+erte,-i(/)'

glColorF8(0//)'

gl+erte,-i(0/)'

glColorF8(/0/)'

gl+erte,-i(0/0)'

glColorF8(//0)'

gl+erte,-i(/0)'

glColorF8(0//0)'

gl$nd()'

gllush()'

1

int 2 3 '

void dis4la5(){

glClear(GL_COLO_!"$_!%&)'

gl6ush7atri,()'

gl&ranslate8(//2)'

Draw()'

gl6o47atri,()'

glut*wa4!u9ers()'

1

void :5e5board(unsigned char He5/ int ,/ int 5){

i8  (He5 33 IdI)gl&ranslate8(B//)'

else i8 (He5 33 IaI)

gl&ranslate8(EB//)'

1

void :5*4eciale5board(int He5/ int ,/ int 5){

switch(He5){

case GL"&_$J_L$&K

glotate8(B///0)'

breaH'

1

1

void u4date(int value){

glut6ostedis4la5()'

glut&i:erunc(;/u4date/)'

1

void :ain(int argc/ char argv){

glut%nit(=argc/argv)'

glut%nitDis4la57ode(GL"&_D$6& ? GL"&_DO"!L$ ? GL"&_G!)'

glut%nit@indow6osition(0/0)'

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 6/31

glut%nit@indow*i2e(AB/B)'

glutCreate@indow(Choirul ida5at)'

gluOrtho-D(EF-/F-/E-B/-B)'

glut&i:erunc(F/u4date/)'

glutDis4la5unc(dis4la5)'

glute5boardunc(:5e5board)'

glut*4ecialunc(:5*4eciale5board)'

glut7ainLoo4()'

1

 b/ :utput

3/ Modifika0i kode progam pada latian ( dan tambakan program pada

fung0i m%Spe4ialKe%board 0eingga dapat memutar ob2ek kebalikan

 putaran dengan menekan tombol pana kanan dan memutar ob2e4t ke ata0

ke ba"a dengan tombol pana ata0 ba"a / Tampilkan 0our4e 4oden%a/

!erikan ke0impulan<

a/ S4ript#include <stdlib.h>

#include <glut.h>

void Draw(){

glClear(GL_COLO_!"$_!%&)'

glClearColor(0/0/0/0)'

gl!egin(GL_"D*)'

gl+erte,-i(/)'

glColorF8(0//)'

gl+erte,-i(0/)'

glColorF8(/0/)'

gl+erte,-i(0/0)'

glColorF8(//0)'

gl+erte,-i(/0)'

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 7/31

glColorF8(0//0)'

gl$nd()'

gllush()'

1

int 2 3 '

void dis4la5(){

glClear(GL_COLO_!"$_!%&)'

gl6ush7atri,()'

gl&ranslate8(//2)'

Draw()'

gl6o47atri,()'

glut*wa4!u9ers()'

1

void :5e5board(unsigned char He5/ int ,/ int 5){

i8  (He5 33 IdI)gl&ranslate8(B//)'

else i8 (He5 33 IaI)

gl&ranslate8(EB//)'

1

void :5*4eciale5board(int He5/ int ,/ int 5){

switch(He5){

case GL"&_$J_L$&K

glotate8(B///0)'

breaH'

case GL"&_$J_%G&Kglotate8(EB///0)'

breaH'

case GL"&_$J_"6K

glotate8(B///0)'

breaH'

case GL"&_$J_DO@K

glotate8(EB///0)'

breaH'

1

1

void u4date(int value){

glut6ostedis4la5()'

glut&i:erunc(;/u4date/)'

1

void :ain(int argc/ char argv){

glut%nit(=argc/argv)'

glut%nitDis4la57ode(GL"&_D$6& ? GL"&_DO"!L$ ?

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 8/31

GL"&_G!)'

glut%nit@indow6osition(0/0)'

glut%nit@indow*i2e(AB/B)'

glutCreate@indow(Choirul ida5at)'

gluOrtho-D(EF-/F-/E-B/-B)'

glut&i:erunc(F/u4date/)'

glutDis4la5unc(dis4la5)'

glute5boardunc(:5e5board)'

glut*4ecialunc(:5*4eciale5board)'

glut7ainLoo4()'

1

 b/ :utput

*/ Tambakan pada fung0i m%Ke%board; untuk meruba "arna ob%ek 

0eban%ak 3 pilian "arna ke4uali itam dan puti 7detek0i 3 tombol

ke%board 7normal8 lain8< Tampilkan 0our4e 4oden%a/ !erikan ke0impulan<

a/ S4ript#include <stdlib.h>

#include <glut.h>

void Draw(){

glClear(GL_COLO_!"$_!%&)'

glClearColor(0/0/0/0)'

gl!egin(GL_"D*)'

gl+erte,-i(/)'

MMglColorF8(0//)'

gl+erte,-i(0/)'

MMglColorF8(/0/)'

gl+erte,-i(0/0)'MMglColorF8(//0)'

gl+erte,-i(/0)'

MMglColorF8(0//0)'

gl$nd()'

gllush()'

1

int 2 3 '

void dis4la5(){

glClear(GL_COLO_!"$_!%&)'

gl6ush7atri,()'gl&ranslate8(//2)'

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 9/31

Draw()'

gl6o47atri,()'

glut*wa4!u9ers()'

1

void :5e5board(unsigned char He5/ int ,/ int 5){

i8  (He5 33 IdI)

gl&ranslate8(B//)'

else i8 (He5 33 IaI)

gl&ranslate8(EB//)'

else i8 (He5 33 I0I)

glColorF8(0//)'

else i8 (He5 33 I-I)

glColorF8(/0/)'

else i8 (He5 33 IFI)

glColorF8(//0)'

else i8 (He5 33 IBI)glColorF8(0//0)'

1

void :5*4eciale5board(int He5/ int ,/ int 5){

switch(He5){

case GL"&_$J_L$&K

glotate8(B///0)'

breaH'

case GL"&_$J_%G&K

glotate8(EB///0)'

breaH'

case GL"&_$J_"6K

glotate8(B///0)'

breaH'

case GL"&_$J_DO@K

glotate8(EB///0)'

breaH'

1

1

void u4date(int value){

glut6ostedis4la5()'

glut&i:erunc(;/u4date/)'

1

void :ain(int argc/ char argv){

glut%nit(=argc/argv)'

glut%nitDis4la57ode(GL"&_D$6& ? GL"&_DO"!L$ ?

GL"&_G!)'

glut%nit@indow6osition(0/0)'

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 10/31

glut%nit@indow*i2e(AB/B)'

glutCreate@indow(Choirul ida5at)'

gluOrtho-D(EF-/F-/E-B/-B)'

glut&i:erunc(F/u4date/)'

glutDis4la5unc(dis4la5)'

glute5boardunc(:5e5board)'

glut*4ecialunc(:5*4eciale5board)'

glut7ainLoo4()'

1

 b/ :utput

 

,* I#tera$%& Mo%e'/ !uatla pro2e4t baru pada 5i0ual Studio dengan nama prak31mou0eMotion/

=ung0i m%#i0pla% 4allba4k fun4tion %ang di dalamn%a menggunakan

fung0i Point0 untuk meminda po0i0i ob2ek 0e0uai pointer mou0e/

a/ S4ript

#include <stdlib.h>

#include <glut.h>

int w 3 B/ h 3 B'

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 11/31

void Draw(){

glClear(GL_COLO_!"$_!%&)'

gl!egin(GL_"D*)'

gl+erte,-i(/)'

gl+erte,-i(F/)'

gl+erte,-i(F/F)'

gl+erte,-i(/F)'

gl$nd()'

gllush()'

1

void u4date(int value){

glut6ostedis4la5()'

glut&i:erunc(;/u4date/)'

1

Noat ,3/ 53/ 23'void :5Dis4la5(void){

glClear(GL_COLO_!"$_!%&)'

gl6ush7atri,()'

gl&ranslate8(,/5/2)'

Draw()'

gl6o47atri,()'

glut*wa4!u9ers()'

gllush()'

1

void :ouse(int button/ int state/ int ,:ouse/ int 5:ouse){

i8 (button33GL"&_L$&_!"&&O == state33GL"&_DO@){,3,:ouseE(wM-)'

53(hM-)E5:ouse'

1

1

void :ain(int argc/ char argv){

glut%nit(=argc/argv)'

glut%nitDis4la57ode(GL"&_D$6& ? GL"&_DO"!L$ ? GL"&_G!)'

glut%nit@indow6osition(0/0)'

glut%nit@indow*i2e(w/h)'

glutCreate@indow(Choirul ida5at)'

gluOrtho-D(EwM-/wM-/EhM-/hM-)'

glut&i:erunc(F/u4date/)'

glutDis4la5unc(:5Dis4la5)'

glut7ouseunc(:ouse)'

glut7ainLoo4()'

1

 b/ :utput

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 12/31

./ Sempurnakan program di ata0 0eingga tombol kanan ditekan akan

men%ebabkan ob2ek memiliki 0kala %ang membe0ar 7./)8 dan tombol kiriditekan akan men%ebabkan 0kala menge4il 7)/*8/ !erikan 0our4e 4ode

 program/

a/ S4ript

 #include <stdlib.h>

#include <glut.h>

int w 3 B/ h 3 B'

void Draw(){

glClear(GL_COLO_!"$_!%&)'

glClearColor(0/0/0/0)'

gl!egin(GL_"D*)'

glColorF8(//)'

gl+erte,-i(/)'

gl+erte,-i(F/)'

gl+erte,-i(F/F)'

gl+erte,-i(/F)'

gl$nd()'

gllush()'

1

void u4date(int value){

glut6ostedis4la5()'

glut&i:erunc(;/u4date/)'

1

Noat ,3/ 53/ 23'

void :5Dis4la5(void){

glClear(GL_COLO_!"$_!%&)'

gl6ush7atri,()'

gl&ranslate8(,/5/2)'

Draw()'

gl6o47atri,()'

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 13/31

glut*wa4!u9ers()'

gllush()'

1

void :ouse(int button/ int state/ int ,:ouse/ int 5:ouse){

i8 (button33GL"&_L$&_!"&&O == state33GL"&_DO@){

gl*cale8(.-/.-/-)'

1else i8 (button33GL"&_%G&_!"&&O == state33GL"&_DO@){

gl*cale8(-/-/-)'

1

1

void :ain(int argc/ char argv){

glut%nit(=argc/argv)'

glut%nitDis4la57ode(GL"&_D$6& ? GL"&_DO"!L$ ? GL"&_G!)'

glut%nit@indow6osition(0/0)'glut%nit@indow*i2e(w/h)'

glutCreate@indow(Choirul ida5at)'

gluOrtho-D(EwM-/wM-/EhM-/hM-)'

glut&i:erunc(F/u4date/)'

glutDis4la5unc(:5Dis4la5)'

glut7ouseunc(:ouse)'

glut7ainLoo4()'

1

 b/ :utput

(/ Ubala program 0eingga tombol kiri ditekan 0kala membe0ar 7.8 dan

ketika tombol kanan dilepa0kan 7UP8 0kala menge4il 7)/*8/ !erikan 0our4e

4ode program/

a/ S4ript

#include <stdlib.h>

#include <glut.h>

int w 3 B/ h 3 B'

void Draw(){glClear(GL_COLO_!"$_!%&)'

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 14/31

glClearColor(0/0/0/0)'

gl!egin(GL_"D*)'

glColorF8(//)'

gl+erte,-i(/)'

gl+erte,-i(F/)'

gl+erte,-i(F/F)'

gl+erte,-i(/F)'

gl$nd()'

gllush()'

1

void u4date(int value){

glut6ostedis4la5()'

glut&i:erunc(;/u4date/)'

1

Noat ,3/ 53/ 23'void :5Dis4la5(void){

glClear(GL_COLO_!"$_!%&)'

gl6ush7atri,()'

gl&ranslate8(,/5/2)'

Draw()'

gl6o47atri,()'

glut*wa4!u9ers()'

gllush()'

1

void :ouse(int button/ int state/ int ,:ouse/ int 5:ouse){

i8 (button33GL"&_L$&_!"&&O == state33GL"&_DO@){gl*cale8(-/-/-)'

1else i8 (button33GL"&_%G&_!"&&O == state33GL"&_"6){

gl*cale8(.;/.;/-)'

1

1

void :ain(int argc/ char argv){

glut%nit(=argc/argv)'

glut%nitDis4la57ode(GL"&_D$6& ? GL"&_DO"!L$ ? GL"&_G!)'

glut%nit@indow6osition(0/0)'

glut%nit@indow*i2e(w/h)'

glutCreate@indow(Choirul ida5at)'

gluOrtho-D(EwM-/wM-/EhM-/hM-)'

glut&i:erunc(F/u4date/)'

glutDis4la5unc(:5Dis4la5)'

glut7ouseunc(:ouse)'

glut7ainLoo4()'

1

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 15/31

 b/ :utput

 

3/ !uatla nilai parameter %ang ada pada fung0i

glu:rto.#71'));'));1'));'))89

>ela0kan apa %ang ter2adi dan beri ke0impulan 7gambar 0i0tem koordinat8

ubungan antara 0i0tem koordinat openGL dan 0i0tem koordinat %ang

digunakan ole mou0e pointer/

a/ S4ript

 

Pada da0arn%a glu:rto.#7Left;?igt;!ottom;Top8@ digunakan untuk 

menentukan koordinat %ang digunakan pada pada kana0/ Pada ka0u0 di

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 16/31

ata0 koordinat kana0 akan men2adi; 7left B 1')); rigt B ')); bottom B

1')); top B '))8/

 b/ :utput

*/ !uatla pro2e4t baru pada 5i0ual Studio dengan nama prak31

mou0eMotion'/ Gunakan fung0i %ang 0ama dengan no ' dan lengkapidengan fung0i Motion/ !uatla fung0i untuk detek0i motion/ !erikan

ke0impulan<

a/ S4ript

 #include <stdlib.h>

#include <glut.h>

int w 3 B/ h 3 B'

void Draw(){

glClear(GL_COLO_!"$_!%&)'

glClearColor(0/0/0/0)'

gl!egin(GL_"D*)'

glColorF8(//)'

gl+erte,-i(/)'

gl+erte,-i(F/)'

gl+erte,-i(F/F)'

gl+erte,-i(/F)'

gl$nd()'

gllush()'

1

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 17/31

void u4date(int value){

glut6ostedis4la5()'

glut&i:erunc(;/u4date/)'

1

Noat ,3/ 53/ 23'

void :5Dis4la5(void){

glClear(GL_COLO_!"$_!%&)'

gl6ush7atri,()'

gl&ranslate8(,/5/2)'

Draw()'

gl6o47atri,()'

glut*wa4!u9ers()'

gllush()'

1

void :ouse(int button/ int state/ int ,:ouse/ int 5:ouse){i8 (button33GL"&_L$&_!"&&O == state33GL"&_DO@){

,3,:ouseE(wM-)'

53(hM-)E5:ouse'

1

1

void :otion(int ,:ouse/ int 5:ouse){

, 3 ,:ouseE(wM-)'

5 3 (hM-)E5:ouse'

1

void :ain(int argc/ char argv){glut%nit(=argc/argv)'

glut%nitDis4la57ode(GL"&_D$6& ? GL"&_DO"!L$ ? GL"&_G!)'

glut%nit@indow6osition(0/0)'

glut%nit@indow*i2e(w/h)'

glutCreate@indow(Choirul ida5at)'

gluOrtho-D(EwM-/wM-/EhM-/hM-)'

glut&i:erunc(F/u4date/)'

glutDis4la5unc(:5Dis4la5)'

glut7ouseunc(:ouse)'

glut7otionunc(:otion)'

glut7ainLoo4()'

1

 b/ :utput

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 18/31

 

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 19/31

D* T'a% R-a. /A%&%te#%&

'/ !uatla 0ebua kompa0 %ang bi0a perputar 0e4ara 4lo4k"i0e dan

un4lo4k"i0e %ang pu0atn%a berada pada pu0at koordinat/ #engan kontrol

dari tombol CkD dan ClD/

a/ S4ript#include <stdlib.h>

#include <glut.h>

void Draw(){

glClear(GL_COLO_!"$_!%&)'

MMglClearColor(0/0/0/0)'

gl!egin(GL_&%GL$*)'

glColorF8(0//)'

gl+erte,-i(EF/)'

gl+erte,-i(/)'

gl+erte,-i(F/)'

glColorF8(0/0/0)'

gl+erte,-i(EF/)'

gl+erte,-i(F/)'

gl+erte,-i(/E)'

gl$nd()'

gllush()'

1

int 2 3 '

void dis4la5(){glClear(GL_COLO_!"$_!%&)'

gl6ush7atri,()'

gl&ranslate8(//2)'

Draw()'

gl6o47atri,()'

glut*wa4!u9ers()'

1

void :5e5board (unsigned char He5/ int ,/ int 5) {

i8 (He5 33 IlI) {

glotate8(B///0)'

1else i8 (He5 33 IHI) {

glotate8(EB///0)'

1

1

void u4date(int value){

glut6ostedis4la5()'

glut&i:erunc(;/u4date/)'

1

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 20/31

void :ain(int argc/ char argv){

glut%nit(=argc/argv)'

glut%nitDis4la57ode(GL"&_D$6& ? GL"&_DO"!L$ ?

GL"&_G!)'

glut%nit@indow6osition(0/0)'

glut%nit@indow*i2e(AB/B)'

glutCreate@indow(Choirul ida5at)'

gluOrtho-D(EF-/F-/E-B/-B)'

glut&i:erunc(F/u4date/)'

glutDis4la5unc(dis4la5)'

glute5boardunc(:5e5board)'

glut7ainLoo4()'

1

 b/ :utput

./ !uatla . benda 7kotak dan 0egitiga8 %ang dapat dikendalikan 0e4ara

indiidual; dengan memanfaatkan tombol untuk tangan kanan dan tombol

untuk tangan kiri/ 7CaD; D0D; DdD; D"D untuk kotak dan Ctombol pana ata0;

 ba"a; kiri; kananD untuk 0egitiga8 atau dengan metode %ang lain

a/ S4ript#include <stdlib.h>

#include <glut.h> 

int a3'

int b3'

int c3'

int d3'

void uads() {

gl!egin(GL_"D*)'

glColorF8(//0)'

gl+erte,-8(E-;/)'

gl+erte,-8(E-;/;)'

gl+erte,-8(-;/;)'

gl+erte,-8(-;/)'

gl$nd()'

1

void &riangle() {

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 21/31

glColorF8(0//)'

gl!egin(GL_&%GL$*)'

gl+erte,-i(E-;/ E0)'

gl+erte,-i(-;/ E0)'

gl+erte,-i(/ E)'

gl$nd()'

1

void render*cene(){

glClear(GL_COLO_!"$_!%&)'

glClearColor(0/0/0/0)'

gl6ush7atri,()'

gl&ranslate8(b/c/)'

uads()'

gl6o47atri,()'

gl6ush7atri,()'gl&ranslate8(a/d/)'

 &riangle()'

gl6o47atri,()'

gllush()'

1

void :5e5board (unsigned char He5/ int ,/ int 5) {

i8 (He5 33 IaI) {

bE30'

1

else i8 (He5 33 IdI) {bP30'

1

else i8 (He5 33 IwI) {

cP30'

1

else i8 (He5 33 IsI) {

cE30'

1

1

void :5*4eciale5(int He5/ int ,/ int 5) {

switch(He5) {

case GL"&_$J_L$& K

aE30'

breaH'

case GL"&_$J_%G& K

aP30'

breaH'

case GL"&_$J_"6 K

dP30'

breaH'

case GL"&_$J_DO@ K

dE30'

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 22/31

breaH'

1

1

void u4date(int value) {

glut6ostedis4la5()'

glut&i:erunc(;/u4date/)'

1

void :ain (int argc/ char argv) {

glut%nit(=argc/ argv)'

glut%nitDis4la57ode(GL"&_D$6& ? GL"&_*%GL$ ?

GL"&_G!)'

glut%nit@indow6osition(0/0)'

glut%nit@indow*i2e(B/B)'

glutCreate@indow(Choirul ida5at)'

gluOrtho-D(EF-./F-./EF-./F-.)'glutDis4la5unc(render*cene)'

glut&i:erunc(0/u4date/)'

glute5boardunc(:5e5board)'

glut*4ecialunc(:5*4eciale5)'

glut7ainLoo4()'

1

 b/ :utput

(/ !uatla program %ang dapat menguba 0kala ob2ek 0e4ara interaktif 

menggunakan interak0i drag/ Ketika tombol kanan ditekan maka po0i0i

dan % di0impan dalam ariabel global; 2ika drag dilakukan maka 2arak 

 pointer teradap po0i0i %ang di0impan 0ebelumn%a akan men%ebabkan

 perubaan 0kala 0e4ara interaktif 7men2au B membe0ar; mendekat B

menge4il8/

a/ S4ript#include <stdlib.h>

#include <glut.h>

int w 3 B/ h 3 B'

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 23/31

void Draw(){

glClear(GL_COLO_!"$_!%&)'

glClearColor(0/0/0/0)'

gl!egin(GL_"D*)'

glColorF8(//)'

gl+erte,-i(/)'

gl+erte,-i(F/)'

gl+erte,-i(F/F)'

gl+erte,-i(/F)'

gl$nd()'

gllush()'

1

void u4date(int value){

glut6ostedis4la5()'

glut&i:erunc(;/u4date/)'1

Noat ,3/ 53/ 23'

void :5Dis4la5(void){

glClear(GL_COLO_!"$_!%&)'

gl6ush7atri,()'

gl&ranslate8(,/5/2)'

Draw()'

gl6o47atri,()'

glut*wa4!u9ers()'

gllush()'

1

void :ouse(int button/ int state/ int ,:ouse/ int 5:ouse){

i8 (button33GL"&_L$&_!"&&O == state33GL"&_DO@){

,3,:ouseE(wM-)'

53(hM-)E5:ouse'

gl*cale8(0.;/0.;/)'

1else i8 (button33GL"&_%G&_!"&&O ==

state33GL"&_DO@){

,3,:ouseE(wM-)'

53(hM-)E5:ouse'

gl*cale8(.Q/.Q/)'

1

1

void :otion(int ,:ouse/ int 5:ouse){

, 3 ,:ouseE(wM-)'

5 3 (hM-)E5:ouse'

1

void :ain(int argc/ char argv){

glut%nit(=argc/argv)'

glut%nitDis4la57ode(GL"&_D$6& ? GL"&_DO"!L$ ?

GL"&_G!)'

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 24/31

glut%nit@indow6osition(0/0)'

glut%nit@indow*i2e(w/h)'

glutCreate@indow(Choirul ida5at)'

gluOrtho-D(EwM-/wM-/EhM-/hM-)'

glut&i:erunc(F/u4date/)'

glutDis4la5unc(:5Dis4la5)'

glut7ouseunc(:ouse)'

glut7otionunc(:otion)'

glut7ainLoo4()'

1

 b/ :utput

3/ !uatla program untuk detek0i #:U!LE &LI&K; ketika #:U!LE

&LI&K ob2e4t %ang dipili 0kalan%a men2adi '/*; 0edangkan untuk 

#:U!LE &LI&K berikutn%a Ukuran ob2e4t ter0ebut kembali 0eperti

0emula/ !uatla Ke0impulan dan Algoritman%a/

a/ S4ript#include stdlib.h

#include stdio.h

#include <conio.h>

#include glut.h

Noat ,30/530/23'

int w3B/ h3B/ Nag3/Ng'

void drawuad() {

gl!egin(GL_6OLJGO)'

glColorF8(0//)'

gl+erte,-8(E-./E-.)'

gl+erte,-8(-./E-.)'

gl+erte,-8(-./-.)'

gl+erte,-8(E-./-.)'

gl$nd()'

1

void :ouse(int button/ int state/ int ,:ouse/ int 5:ouse){

i8 (Ng33){

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 25/31

i8  (state33GL"&_DO@){

i8 (button33GL"&_L$&_!"&&O){

NagPP'

i8 (Nag33-){

Ng3F'

,30.;'

530.;'

4rint8(Rd/ Ng)'

1

1

1

1

i8  (Ng33F){

i8  (state33GL"&_DO@){

i8 (button33GL"&_L$&_!"&&O){

NagEE'i8 (Nag33){

,30'

530'

Ng3'

1

1

1

1

1

void render*cene(void){

glClear(GL_COLO_!"$_!%&)'glClearColor(0/0/0/0)'

gl6ush7atri,()'

gl*cale8(,/5/2)'

drawuad()'

gl6o47atri,()'gllush()'

1

void ti:er(int value){

glut6ostedis4la5()'

glut&i:erunc(;/ti:er/)'

1

void :ain (int argc/ char argv){

glut%nit(=argc/ argv)'

glut%nit@indow6osition(0/0)'

glut%nit@indow*i2e(w/h)'

glutCreate@indow(Choirul ida5at)'

gluOrtho-D(EwM-/wM-/EhM-/hM-)'

glutDis4la5unc(render*cene)'

glut7ouseunc(:ouse)'

glut&i:erunc(0/ti:er/)'

glut7ainLoo4()'

1

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 26/31

 b/ :utput

 

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 27/31

E/ Pen2ela0an

'/ Kon0ep Input Ke%board 7General !utton8

glute5boardunc  adala 0uatu fung0i 4allba4k untuk digunakan 0ebagaima0ukan pada 0uatu 2endela "indo"/ Kon0epn%a pada 0aat 0eorang u0er 

atau pengguna memberikan input %aitu menekan pada tombol ke%board;

0etiap tombol ke%board %ang ditekan akan menga0ilkan 0uatu karakter 

AS&II %ang akan menga0ilkan 0uatu 4allba4k ke%board %ang tela

didefini0ikan berupa fung0i dengan ( parameter/

void :5e5board(unsigned char He5/ int ,/int 5){MM :asuHHan 4erintah disini1

=ung0i ter0ebut beri0i 0uatu perinta %ang akan digunakan dalam pengopera0ian

 program ole u0er/ #i dalam fung0i ter0ebut terdapat ( parameter dan didalamn%a dideklara0ikan 0uatu perinta %ang nantin%a akan digunakan/

void ti:er(int value){glut6ostedis4la5()'glut&i:erunc(0/ ti:er/ )'

1void :5e5board(unsigned char He5/ int ,/ int 5){

i8 (He5 33 IaI) gl&ranslate8(/;/)'i8 (He5 33 IdI) gl&ranslate8(/E;/)'

1void render*cene(void){

glClear(GL_COLO_!"$_!%&)'

glColorF8(0././.)'Draw()'gllush()'

1

Sintak0 ter0ebut adala 0intak da0ar %ang digunakan; untuk bi0a

menggunakan input ke%board maka aru0 diberikan 4allba4k fun4tion untuk 

memanggiln%a/

glutDis4la5unc(render*cene)'glute5boardunc(:5e5board)'glut&i:erunc(F/ti:er/)'

Sintak0 ter0ebut aru0 di0ertakan pada fung0i main/

Selain itu; pada ke%board 2uga terdapat metod lain %ang bi0a digunakan

dalam pro0e0 input ini; %aitu@ Ke% Pre00; Ke% Up; dan Ke% !uffering/

a/ Ke% Pre00

Metode ini akan memberitaukan kita pada 4ommand line tombol apa %ang

0edang kita tekan/ Metod ini dapat dinamakan ke%Pre00ed dan pada GLUT

akan terdapat ( parameter; 0atu untuk tombol %ang 0aat itu ditekan; dan dua

untuk memberitaukan loka0i mou0e ketika tombol ditekan/

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 28/31

void He56ressed(unsigned char He5/ int ,/ int 5){%8(He5 33 SaT){ MM saat to:bol SaT diteHan

MM aHsi 5ang diberiHan saat to:bol SaT diteHan1

1

#an fung0i ter0ebut akan dipanggil pada fung0i main; namun 4allba4k 

fun4tion1n%a 0edikit berbeda dari 4allba4k fun4tion %ang 0ebelumn%a/

glute5boardunc(He56ressed)' MM :e:beritahuHan 4ada GL"& untuH:enggunaHan :ethod He56ressed untuH to:bol 5ang diteHan

 b/ Ke% Up

=ung0i Ke% Up ini adala fung0i regi0ter %ang men%impan nilai ma0ukan

0ampai ketika tombol ke%board dilepa0kan/ Hal ini bi0a berguna untuk pengaturan

 beberapa nilai ketika 0uatu tombol pertama kali ditekan; dan tetap men2aga nilai

ter0ebut 0ampai tombol ter0ebut dilapa0kan/ Metod 0ama 0eperti metod Ke%

Pre00 tadi %aitu memiliki ( parameter %ang memiliki fung0i %ang 0ama;

an%a berbeda pada penamaann%a %aitu; ke%Up/

void He5"4(unsigned char He5/ int ,/ int 5){%8(He5 33 SaT){ MM saat to:bol SaT diteHan

MM aHsi 5ang diberiHan saat to:bol SaT diteHan1

1

#an fung0i ter0ebut akan dipanggil pada fung0i main; namun 4allba4k 

fun4tion1n%a 0edikit berbeda dari 4allba4k fun4tion %ang 0ebelumn%a/

./ Kon0ep Input Ke%board Spe4ial Ke%

GlutSpe4ial=un4 merupakan 0uatu fung0i 4allba4k pada opengl %ang

digunakan untuk mengaktifkan tombol1tombol ku0u0 pada ke%board

0eingga dapat digunakan untuk berinterak0i antara u0er dengan ob2ek %ang

ada di dalam di0pla% opengl/ Pendeklara0iann%a adala @

void glut*4ecialunc (void ( 8unc) (int He5/ int ,/ int 5))'

4allba4k ke%board ku0u0 dipi4u ketika ke%board fung0i atau tombol

0pe4ial %ang dideklara0ikan ditekan/ Parameter 4allba4k kun4i adalaGLUTFKEYFtombol ku0u0// Parameter dan % mengindika0ikan koordinat

relatif 2endela ketika tombol ditekan/ Ketika 2endela baru dibuat; tidak ada

4allba4k ku0u0 a"aln%a terdaftar dan 0troke kun4i ku0u0 di 2endela diabaikan/

Mele"ati NULL untuk glutSpe4ial=un4 Menonaktifkan genera0i 4allba4k 

ku0u0/ Selama 4allba4k ku0u0; glutGetModifier0 dapat dipanggil untuk 

menentukan keadaan tombol penguba ketika ke%0troke menga0ilkan

4allba4k ter2adi/

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 29/31

(/ =ung0i #a0ar Pembuatan Interak0i dengan Menggunakan Mou0efun4tion

GL"&6% void 6%$&J glut7ouseunc(void (GL"&CLL!C 8unc)(int button/int state/ int ,/ int 5))'

Paramater fun4 adala fung0i %ang akan ditangani dengan eent klik mou0e/

GL"&6% void 6%$&J glut7otionunc(void 8unc(int ,/ int 5))'

=ung0i di ata0 adala fung0i pelengkap dari fung0i interak0i mou0e untuk 

mendetek0i gerakan mou0e/

3/ Ini0iali0a0i dalam Penggunaan Mou0e=un4tion

 void :ouse(int button/ int state/ int ,/int 5){i8 (button33GL"&_L$&_!"&&O ==

state33GL"&_DO@)

drawDot(,/BE5)'

i8 (button33GL"&_%G&_!"&&O == state33GL"&_DO@)drawDot-(,/BE5)'i8 (button33GL"&_7%DDL$_!"&&O ==state33GL"&_DO@)drawDotF(,/BE5)'

1

void :otion(int ,/int 5){1

#alam penerapan interak0i mou0e pada open gl glut; =ung0i ini0iali0a0in%a

adala 0ebagai berikut @0.  GL"&_L$&_!"&&O

=ung0i ini0iali0a0i ini bertu2uan untuk ini0iali0a0i button mou0e kiri/ >adi

apabila kita ingin mengaktifkan fung0i penggunaan dari button mou0e 0ebela

kiri maka bi0a menggunakan fung0i ini0iali0a0i ini/-. GL"&_%G&_!"&&O

=ung0i ini0iali0a0i ini bertu2uan untuk ini0iali0a0i button mou0e kanan/ >adi

apabila kita ingin mengaktifkan fung0i penggunaan dari button mou0e 0ebela

kanan maka bi0a menggunakan fung0i ini0iali0a0i ini/F. GL"&_7%DDL$_!"&&O

=ung0i ini0iali0a0i ini bertu2uan untuk ini0iali0a0i button mou0e tenga/ >adi

apabila kita ingin mengaktifkan fung0i penggunaan dari button mou0e tengamaka bi0a menggunakan fung0i ini0iali0a0i ini/

B. GL"&_DO@

=ung0i ini0iali0a0i ini adala untuk ini0iali0a0i ketika tombol mou0e ditekan/

;. GL"&_"6

=ung0i ini0iali0a0i ini adala untuk ini0iali0a0i ketika tombol mou0e dilepa0kan/

Kemudian pada main program perlu menambakan fung0i untuk 4allba4k 

fung0i Mou0e=un4tion/glut7ouseunc(:ouse)'glut7otionunc(:otion)'

*/ Si0tim Koordinat interak0i mou0e pada glut

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 30/31

Si0tim koordinat interak0i mou0e pada glut adala 0ebagai berikut/ Mi0aln%a

ditentukan iini0iali0a0i a"al adala @

int w 3 B/ h3B'

Noat ,3/ 53/ 23'

maka @

a/ Titik );) berada pada po2ok kiri ata0; koordinatn%a akan beruba apabila ter2adi

 perge0eran mou0e/

 b/ Titik 3,);) berada pada po2ok kanan ata0/

4/ Titik ); 3,) berada pada po2ok kiri ba"a

d/ Titik 3,);3,) berada pada po2ok kanan ba"a

7/21/2019 Laporan 4 grafkom

http://slidepdf.com/reader/full/laporan-4-grafkom 31/31

=/ Ke0impulan

=ung0i 4allba4k di dalam fung0i glut#i0pla%=unk merupakan fung0i %ang

mendklara0ikan ob2ek %ang akan berinterak0i dengan tombol ke%borad;

Sedangkan fung0i glutTimer=un4 berfung0i agar tombol ke%board dapat

teru0 terdetek0i ole glut/

U0er dapat berinterak0i dengan ob2ek %ang ada dengan menekan

tombol1tombol 0pe4ial ke%board %ang tela di deklara0ikan ke dalam fung0i

4allba4k