TUGAS PRAKTIKUM
A. TUGAS 1 (Bouncing Ball) •
Kode Program //Deklarasi library //Deklarasi #include #include #include #include #defne PI #defne PI 3.11!"$!% //Deklarasi nilai PI char title&' ( )*ouncing *all +D,)char title&' +D,)- //udul window int windowidth int windowidth ( $0- //ebar window int window2eight int window2eight ( 0- //4inggi window int windowPos5 int windowPos5 ( !0- //*atas koordinat 5 int windowPos6 int windowPos6 ( !0- //*atas koordinat 6 78oat ball9adius ( 0.3%- //9adius bola //Posisi bola di tengah 78oat ball5 ( :!0.0%78oat ball6 ( !0.0%//*atas area ;ergerakan bola 78oat ball5a= ball5in ball6a= ball6in//?ece;atan bola 78oat =@;eed ( 0."%- //Pergerakan secara horiAontal 78oat y@;eed ( 0.0"%- //Pergerakan secara Bertikal int re%reshillis int re%reshillis ( 300- //aktu re%resh +milliseconds, 7double cli;Crea5e%t cli;Crea59ight cli;Crea6*ottom cli;Crea64o;- //Proyeksi area kera Boid init7+, Boid init7+, E glFlearFolor+0.0 glFlearFolor+0.0 1.0 0.0 1.0,- //engatur background ( hiau G Boid dis;lay+, Boid dis;lay+, E glFlear+7HF9H*JKKL9H*I4,- //embersihkan warna buMer glatri=ode+7HDLNIL,- //enggunakan model:Biew matri= gloadIdentity+,- //9eset model:Biew matri= gl4ranslate%+ball5 ball6 0.0%,- //enga //engatur tur ;osisi ;er;indahan //embuat lingkaran dengan segitiga gl*egin+7H49ICO7LHKCO,glNerte=%+0.0% 0.0%,- //4itik tengah lingkaran int num@egments int num@egments ( 100- //umlah segment 78oat angle- //Deklara //Deklarasi si Bariabel angle //Perulangan segitiga hingga membentuk lingkaran %or++int %or int i(0 i(0- i<(num@egmentsi<(num@egments- i, //ika umlah segitiga <( 100 segitiga akan terus dicetak E angle ( i Q .0% Q PI / num@egmentsnum@egments- //3$0 deraat untuk semua segmen glNerte=%+cos+angle, Q ball9adius sin+angle, Q ball9adius,//Pewarnaan +gradasi warna, i% +iR((0, +iR((0, //ika indeks segitiga ( gena; E glFolor3%+110,- //arna kuning G else E
1 S1 Pend. Teknik Informatika 2014 OFF B
glFolor3%+001,- //arna biru G G glLnd+,glut@wa;*uMers+,- //enukar layar buMer //?ontrol Cnimasi ball5 ( =@;eedball6 ( y@;eed//emeriksa ika bola melebihi batas te;i i% +ball5 +ball5 > ball5a=, E ball5 ( ball5a==@;eed ( :=@;eedG else i% +ball5 +ball5 < ball5in, E ball5 ( ball5in=@;eed ( :=@;eedG i% +ball6 +ball6 > ball6a=, E ball6 ( ball6a=y@;eed ( :y@;eedG else i% +ball6 +ball6 < ball6in, E ball6 ( ball6iny@;eed ( :y@;eedG G Boid resha;e+7siAei Boid resha;e+7siAei width 7siAei height, E //enghitung as;ect ratio window i% +height((0, +height((0, height(1- //encegah ;embagian dengan 0 78oat as;ect ( +78oat,width / +78oat,heightglNiew;ort+0 glNiew;ort+0 0 width height,- //engatur mode Biew;ort //enyesuaikan as;ect ratio dengan Biew;ort glatri=ode+7HP9LF4IO,gloadIdentity+,i% +width>(height, +width>(height, E cli;Cr cli;Crea5 ea5e e%t %t ( :1.0 :1.0 Q as;ect as;ect-cli;Crea59ight cli;Crea59ight ( 1.0 Q as;ectas;ectcli;Crea6*ottom ( :1.0cli; cli;Cr Crea ea64 64o; ( 1.01.0G else E cli; cli;Cr Crea ea5 5e% e%tt ( :1.0 :1.0-cli;Crea59ight cli;Crea59ight ( 1.0cli;Crea6*ottom ( :1.0 / as;ectcli; cli;Cr Crea ea64 64o; ( 1.0 1.0 / as;e as;ect ct-G //engatur koordinat window glurthoD+cli;Crea5e%t cli;Crea59ight cli;Crea6*ottom cli;Crea64o;,ball5in ( cli;Crea5e%t ball9adiusball5a= ( cli;Crea59ight : ball9adiusball6in ( cli;Crea6*ottom ball9adiusball6in ( cli;Crea64o; : ball9adiusG
2 S1 Pend. Teknik Informatika 2014 OFF B
//Kungsi kontrol waktu untuk mengulang animasi Boid 4imer+ Boid 4imer+int int Balue, Balue, E glutPost9edis;lay+,- //enam;ilkan obek kembali glut4imerKunc+re%reshillis 4imer 0,- //?ontrol waktu +dalam milliseconds, G int main+int int main+ int argc argc char char QQargB, QQargB, //%ungsi utama yang dialankan ;rogram E glutInit+Sargc argB,- //inisialisasi 7J4 glutInitDis;layode+7J4HDJ*L,- //ode buMer ( double glutInitindow@iAe+windowidth window2eight,- //Inisiasi ukuran window glutInitindowPosition+windowPos5 windowPos6,- //Inisiasi ;osisi window glutFreateindow+title,- //emang //emanggil gil %ungsi TtitleT untuk menam;ilkan udul glutDis;layKunc+dis;lay,- //eman //emanggil ggil %ungsi Tdis;layT untuk menam;ilkan obek glut9esha;eKunc+resha;e,- //emanggil %ungsi Tresha;eT glut4imerKunc+0 4imer 0,- //?ontrol waktu ;ertama init7+,- //Inisiasi ;en7 glutainoo;+,- //engulangi ;roses return 0return 0G
•
Output Program
•
Penjelasan
Program ini merupakan sebuah program yang digunakan untuk membuat bouncing ball yang memiliki gradasi warna. Objek bola (lingkaran) dibuat dari perulangan segitiga ( for ( for ) dan gradasi gradasi warnan warnanya ya menggu menggunak nakan an pengko pengkondi ndisian sian if-el -else di mana mana keti ketika ka inde indeks ks segme segmen n (segitiga) adalah genap (termasuk nol), maka warnanya kuning, sedangkan jika indeksnya ganjil, maka warnanya biru.
3 S1 Pend. Teknik Informatika 2014 OFF B
Untuk perpindahan perpindahan bola (animasi), ditentukan ditentukan posisi awal bola yaitu di sudut kiri-atas kiri-atas kanvas yang memiliki batas maksimal koordinat ( x ( x dan y dan y)) 5. !ola bergerak ." ke se#ara hori$ontal hori$ontal dan ." se#ara verti#al dengan ke#epatan ke#epatan refresh refresh % ms. Pada kontrol waktu, ditentukan bahwa jika perpindahan bola (baik se#ara hori$ontal maupun vertikal) memiliki x dan y dan y yang melebihi batas maksimal koordinat yang telah ditentukan, maka perpindahan bola akan sampai batas maksimal koordinat saja, sehingga pergerakan bola akan terlihat seperti pantulan. &ontrol waktu animasi dipanggil dengan menggunakan perintah glutTimerFunc glutTimerFunc yang akan memanggil 'ungsi imer* ketika waktu animasi telah habis. +i dalam 'ungsi ini, animasi akan diulang (ditampilkan kembali).
B. TUGAS 2 (Transformasi) •
Kode Program dan Output
a) our#e r#e o ode
Output
4 S1 Pend. Teknik Informatika 2014 OFF B
b) our#e ode
Output Program
•
Penjelasan
+ari hasil program yang dibuat di atas dapat dilihat bahwa tidak ada perbedaan antara Translatef.Rotatef dan Rotatef.Translatef . &eduanya mempunyai 'ungsi yang sama, yaitu
sebagai penggerak (bergeser dan berputar) objek yang telah dibuat sebelumnya.
C. TUGAS 3 (Baling-baling Berputar) •
Kode Program //Deklarasi library //Deklarasi #include #include //Deklarasi Bariabel global int =(0int =(0int A(0int A(0int y(10int y(10Boid 4imer+ Boid 4imer+int int Balue, Balue, //mendeklarasikan ;enggunaan timer %unction E i% +A +A <(3$0, E = ( 1A ( 1G i% +A>3$0, +A>3$0, E = ( :1-
5 S1 Pend. Teknik Informatika 2014 OFF B
y :( 1G i% +y<0, +y<0, E = ( 1A ( 0y ( 3$0G glutPost9edis;lay+,-//mendeklarasikan glutPost9edis;lay+,//mendeklarasikan ;erintah untuk mengakti%kan dis;lay secara berkala glut4imerKunc+104imer0,G Boid Draw+Boid Boid Draw+ Boid,, //Pembuatan obek baling:baling E gl*egin+7H49ICO7L@,glFlear+7HF9H*JKKL9H*I4,//@egitiga 1 glFolor3%+1.1.1.,- //mendeklarasikan warna ;utih ;ada obek glNerte=d+00,glFolor3%+1.1.0.,- //mendeklarasikan warna kuning ;ada obek glNerte=d+:1U00,glNerte=d+1!00,//@egitiga glFolor3%+1.1.1.,- //mendeklarasikan warna ;utih ;ada obek glNerte=d+00,glFolor3%+1.1.0.,- //mendeklarasikan warna kuning ;ada obek glNerte=d+:1U0:0,glNerte=d+1U0:0,glLnd+,G Boid dis;lay+ Boid dis;lay+Boid Boid,, E glFlear+7HF9H*JKKL9H*I4,- //membersihkan kanBas glPo;atri=+,gl9otate%+=0.0.1.,- //mendeklarasikan sudut awal untuk rotasi +;er;utaran, obek Draw+,- //memanggil obek glPushatri=+,glKlush+,- //merender obek G Boid main+int Boid main+ int argc argc char char QQargB, QQargB, E glutInit+Sargc argB,glutInitDis;layode+7J4HDLP42 V 7J4H@IO7L V 7J4H97*C,glutInitindowPosition+100100,- //mengatur ;osisi kanBas glutInitindow@iAe+00,- //mengatur ukuran kanBas glutFreateindow+)*aling:baling) glutFreateindow+ )*aling:baling),,- //nama endela windows yang muncul ;ada kanBas glurthoD+:3030:3030,- //mengatur koordinat kanBas glutDis;layKunc+dis;lay,- //menam;ilkan obek glut4imerKunc+104imer0,- //mendeklarasikan %ungsi untuk mengakti%kan timer %unction glutainoo;+,G
6 S1 Pend. Teknik Informatika 2014 OFF B
•
Output Program
•
Penjelasan
Program ini merupakan sebuah program yang digunakan untuk membuat sebuah baling baling yang bergerak se#ara Clockwise (sear (searah ah jarum jarum jam) jam) dan dan Unclockwise Unclockwise (berlawanan dengan arah jarum jam). Program ini menggunakan glRotatef menggunakan glRotatef untuk untuk mendeklarsikan sudutnya. +an untuk menggeraka menggerakan n baling-balin baling-baling g tersebut tersebut telah dideklarasikan dideklarasikan di dalam void Timer(int value) untuk mengatur waktu perputarannya.
D. TUGAS (Baling-baling Bergeser) •
Kode Program //Deklarasi library #include #include //Deklarasi Bariabel global Boid 4imer+ Boid 4imer+int int Balue, Balue, //mendeklarasik //mendeklarasikan an ;enggunaan timer %unction E glutPost9edis;lay+,- //mendeklarasik //mendeklarasikan an ;erintah untuk mengakti%kan dis;lay secara berkala glut4imerKunc+104imer0,G Boid Draw+ Boid Draw+Boid Boid,, //Pembu //Pembuatan atan obek baling:balin baling:baling g E
7 S1 Pend. Teknik Informatika 2014 OFF B
gl*egin+7H49ICO7L@,glFlear+7HF9H*JKKL9H*I4,//@egitiga 1 glFolor3%+1.1.1.,- //mendeklarasik //mendeklarasikan an warna ;utih ;ada obek glNerte=d+00,glFolor3%+1.1.0.,- //mendeklarasik //mendeklarasikan an warna kuning ;ada obek glNerte=d+:1U00,glNerte=d+1!00,//@egitiga glFolor3%+1.1.1.,- //mendeklarasik //mendeklarasikan an warna ;utih ;ada obek glNerte=d+00,glFolor3%+1.1.0.,- //mendeklarasik //mendeklarasikan an warna kuning ;ada obek glNerte=d+:1U0:0,glNerte=d+1U0:0,glLnd+,G Boid dis;lay+Boid Boid dis;lay+ Boid,, E glFlear+7HF9H*JKKL9H*I4,- //membersihkan kanBas glPo;atri=+,gl4ranslate%+30.0.,- //mendeklarasik //mendeklarasikan an sudut awal untuk ;er;indahan obek Draw+,- //memanggil obek glPushatri=+,glKlush+,- //merender obek G Boid main+int Boid main+ int argc argc char char QQargB, QQargB, E glutInit+Sargc glutInit+Sargc argB,glutInitDis;layode+7J4HDLP42 V 7J4H@IO7L V 7J4H97*C,glutInitindowPosition+100100,- //mengatur ;osisi kanBas glutInitindow@iAe+00,- //mengatur ukuran kanBas glutFreateindow+ )*aling:baling) )*aling:baling),,- //nama endela windows yang muncul ;ada kanBas glurthoD+:1!001!00 glurthoD+:1!001!00:1!001!00 :1!001!00,,- //mengatur koordinat kanBas glutDis;layKunc+dis;lay,- //menam;ilk //menam;ilkan an obek glut4imerKunc+104imer0,- //mendeklarasik //mendeklarasikan an %ungsi untuk mengakti%kan timer %unction glutainoo;+,G
•
Output Program
8 S1 Pend. Teknik Informatika 2014 OFF B
•
Penjelasan
Program ini merupakan sebuah program yang digunakan untuk membuat sebuah baling baling yang bergerak se#ara hori!ontal . Prog Progra ram m ini ini meng menggu guna naka kan n glTranslatef glTranslatef untuk mendeklarsikan pergerakannya. &ontrol waktu pergerakan diatur di dalam 'ungsi Timer(int valu value) e) di mana 'ungsi 'ungsi ini akan dipangg dipanggil il oleh glutTimerFunc() glutTimerFunc() yang yang akan menyebabka menyebabkan n animasi berjalan se#ara terus-menerus.
E. TUGAS ! (Jam Analog) •
Kode Program //Deklarasi library #include #include #defne PI 3.11!"$!3! //konstanta #defne PI //Bariabel global 8oat sudut 8oat sudut ( 0int inint inBoid lingkaran+ Boid lingkaran+int int radius radius int int umlahHtitik umlahHtitik int int =Htengah =Htengah int int yHtengah, yHtengah, E gl*egin+7HP67O,- //membuat lingkaran dari ;olygon %or +i(0-i<(3$0-i, %or +i(0-i<(3$0-i, E 8oat sudut(iQ+QPI/umlahHtitik,8oat 8oat =(=HtengahradiusQcos+sudut,8oat 8oat y(yHtengahradiusQsin+sudut,8oat glNerte=%+=y, G glLnd+,G Boid gigi+, Boid gigi+, E gl*egin+7HWJCD@,- //membuat obek gigi dari ;ersegi //gigi kiri glFolor3%+111,- //Putih glNerte=d+:1!:100,glNerte=d+:1!:1U,glNerte=d+:0:1U,glNerte=d+:0:100,//gigi kanan glFolor3%+111,- //Putih glNerte=d+1!:100,glNerte=d+1!:1U,glNerte=d+0:1U,glNerte=d+0:100,glLnd+,G Boid senyum+, Boid senyum+, E glineidth+U,- //mengatur tebal garis gl*egin+7HIOL@,- //membuat obek senyum dari garis glFolor3%+110,- //?uning
9 S1 Pend. Teknik Informatika 2014 OFF B
glNerte=d+:100:100,glNerte=d+100:100,glLnd+,G Boid ;anaham+, Boid ;anaham+, E gl*egin+7HP67O,glFolor3%+000,glFolor3%+000,- //2itam glNerte=i+000, glNerte=i+1010, glNerte=i+!10, glNerte=i+!0, glNerte=i+:!0, glNerte=i+:!10, glNerte=i+:1010, glNerte=i+000, glLnd+,G Boid ;anahenit+, Boid ;anahenit+, E gl*egin+7HP67O,glFolor3%+111,glFolor3%+111,- //Putih glNerte=i+00, glNerte=i+1000, glNerte=i+!00, glNerte=i+!0, glNerte=i+:!0, glNerte=i+:!00, glNerte=i+:1000, glNerte=i+00, glLnd+,G Boid ;anahDetik+, Boid ;anahDetik+, E gl*egin+7HP67O,glFolor3%+100,glFolor3%+100,- //erah glNerte=i+00, glNerte=i+1010, glNerte=i+!10, glNerte=i+!0, glNerte=i+:!0, glNerte=i+:!10, glNerte=i+:1010, glNerte=i+00, glLnd+,G Boid angka+ Boid angka+8oat 8oat arak arak 8oat 8oat = = 8oat 8oat y, y, E glPoint@iAe+10,- //mengatur tebal titik gl*egin+7HPIO4@,gl*egin+7HPIO4@, glFolor3%+110,- //?uning %or+n(0-n<3$0-n(30, %or +n(0-n<3$0-n(30, //;erulangan titik glNerte=%+arakQ+8oat glNerte=%+arakQ+8oat,sin+nQPI/10.0,=arakQ+ ,sin+nQPI/10.0,=arakQ+ 8oat 8oat,cos+nQPI/10.0,y,,cos+nQPI/10.0,y,- //;enem;atan titik glLnd+,G Boid menit+8oat Boid menit+ 8oat arak arak 8oat 8oat = = 8oat 8oat y, y, E glPoint@iAe+,- //mengatur tebal titik gl*egin+7HPIO4@,gl*egin+7HPIO4@,glFolor3%+000,glFolor3%+000,- //2itam
10 S1 Pend. Teknik Informatika 2014 OFF B
%or+n(0-n<3$0-n($, //;erulangan titik %or+n(0-n<3$0-n($, glNerte=%+arakQ+8oat glNerte=%+arakQ+8oat,sin+nQPI/10.0,=arakQ+ ,sin+nQPI/10.0,=arakQ+8oat 8oat,cos+nQPI/10.0,y,,cos+nQPI/10.0,y,- //;enem;atan titik glLnd+,G Boid render@cene+Boid Boid render@cene+ Boid,, //obek yang akan ditam;ilkan E glFlear+7HF9H*JKKL9H glFlear+7HF9H*JKKL9H*I4,*I4,glFlearFolor+10."U0.1,glFlearFolor+10."U0.1,- //warna background kanBas glPushatri=+,//4elinga glFolor3%+10.$10.1,glFolor3%+10.$10.1,- //Pink lingkaran+!01000000,- //memanggil dan mengisikan argumen %ungsi lingkaran lingkaran+!0100:0000,- //memanggil dan mengisikan argumen %ungsi lingkaran //ingkaran uar glFolor3%+0.$U0."30.", glFolor3%+0.$U0."30.",-- //*iru uda +so%t, lingkaran+!010000,- //memanggil dan mengisikan argumen %ungsi lingkaran //ingkaran Dalam glFolor3%+0.00.U30., glFolor3%+0.00.U30.,-- //*iru aut lingkaran+!10000,- //memanggil dan mengisikan argumen %ungsi lingkaran //ata glFolor3%+111,glFolor3%+111,- //Putih lingkaran+3!100U!! lingkaran+3!100U!!0,0,- //memanggil dan mengisikan argumen %ungsi lingkaran lingkaran+3!100:U!!0,- //memanggil dan mengisikan argumen %ungsi lingkaran //*ola ata glFolor3%+000,glFolor3%+000,- //2itam lingkaran+0100U! lingkaran+0100U!0,0,- //memanggil dan mengisikan argumen %ungsi lingkaran lingkaran+0100:U!0,- //memanggil dan mengisikan argumen %ungsi lingkaran gigi+,- //memanggil %ungsi gigi senyum+,- //memanggil %ungsi senyum angka+30.0.0.,- //memanggil dan mengisikan argumen %ungsi angka menit+30.0.0.,menit+30.0.0.,- //memanggil dan mengisikan argumen %ungsi menit glPo;atri=+,//?ontrol //?on trol animasi arum am menit dan detik glPushatri=+, gl9otate%+sudut001,;anahDetik+,;anahDetik+, glPo;atri=+, glPushatri=+, gl9otate%+sudut/$0001,;anahenit+,;anahenit+, glPo;atri=+, glPushatri=+, gl9otate%+sudut/U0001, ;anaham+, glPo;atri=+,glFolor3%+000, lingkaran+010000, glKlush+,- //merender obek G Boid timer+ Boid timer+int int Balue, Balue, E //mengulang animasi sudut:($-
11 S1 Pend. Teknik Informatika 2014 OFF B
glutPost9edis;lay+, glut4imerKunc+100timer0,G Boid main Boid main +int +int argc argc char char QQargB, QQargB, E glutInit+Sargc argB,- //inisialiasi glut glutInitindowPosition+100100,- //mengatur ;osisi kanBas glutInitindow@iAe+300 glutInitindow@iAe+300300,300,- //mengatur ukuran kanBas glutFreateindow+)am glutFreateindow+)am Cnalog),Cnalog),- //udul kanBas glurthoD+:300.300.:3 glurthoD+:300.300.:300.300.,00.300.,- //mengatur koordinat kanBas glutDis;layKunc+render@cene,- //menam;ilk //menam;ilkan an obek dengan memanggil %ungsi render@cene+, glut4imerKunc+1timer0,- //memulai animasi glutainoo;+,glutainoo;+,- //;erulangan ;roses G
•
Output Program
•
Penjelasan
Prog Progra ram m ini ini meru merupa paka kan n sebua sebuah h prog progra ram m jam jam anal analog og.. am anal analog og ini ini terd terdir irii dari dari beberapa elemen, yaitu badan jam, asesoris, titik angka, dan jarum untuk detik, menit, dan jam. alah satu #ontoh kontrol animasi pada program ini diatur diatur melalui scri"t melalui scri"t berikut berikut ini/ glPushatri=+, gl9otate%+sudut001,pana!etik"#$ glPo;atri=+,-
Perputaran dilakukan dari pusat koordinat jam dengan sudut 1
0nimasi 0nimasi dimulai dengan perintah glutTimerFunc glutTimerFunc dan diulang diulang dengan dengan pemanggilan pemanggilan terhadap 'ungsi timer(). timer(). Pada 'ungsi ini juga terdapat perintah untuk menampilkan kembali objek yang telah di-render di-render .
12 S1 Pend. Teknik Informatika 2014 OFF B