laporan 4 grafkom
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 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 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