OLEH :
NIM : 1220305022
Kelas/Semester : M3 / VI (Genap)
Mengetahui,
Mahasiswa
Dosen Pengajar
( Amna Zalifa)
( Mursyidah, S.T., M.T. )
Nim. 1220305022
Nip.
DAFTAR ISI
BAB I PENDAHULUAN
BAB II PEMBAHASAN
3.1 Storyboard
BAB IV PENUTUP
BAB V KESIMPULAN
5.1 Kesimpulan
BAB I
PENDAHULUAN
Komputer merupakan salah satu hasil dari perkembangan IPTEK yang semakin maju.
Penggunaan pekerjaan dengan komputer dapat menyelesaikan pekerjaan dengan lebih efektif
dan efisien. Penciptaan akan sebuah teknologi yang inovatif dan kreatif menjadi sebuah karya
yang nantinya bisa menjadi sebuah nilai jual.
Komputer yang memiliki piranti grafik untuk mengolah gambar atau grafik disebut
grafik komputer. Komputer grafik pada dasarnya adalah suatu bidang komputer yang
mempelajari cara-cara untuk meningkatkan dan memudahkan komunikasi antara manusia
dengan mesin (komputer) dengan jalan membangkitkan, menyimpan dan memanipulasi
gambar model suatu objek menggunakan komputer. Komputer grafik memungkinkan kita
untuk berkomunikasi lewat gambar-gambar, bagan-bagan dan diagram.
Salah satu kreatifitas yang dapat dihasilkan dengan komputer grafik adalah animasi.
Animasi adalah gambar bergerak berbentuk dari sekumpulan objek (gambar) yang disusun
secara beraturan mengikuti alur pergerakan yang telah ditentukan pada setiap pertambahan
hitungan waktu yang terjadi. Dengan animasi komputer, hal-hal yang awalnya tidak mungkin
digambarkan dengan animasi menjadi mungkin dan lebih mudah. Sebagai contoh adalah
simulasi kapal bergerak, mobil berjalan, maupun gambaran luar angkasa.
Dewasa ini, animasi baik 2 dimensi maupun 3 dimensi sudah menjadi aspek penting
dalam berbagai bidang, seperti bidang edukasi, hiburan maupun bisnis. Saat ini terdapat
banyak jenis software animasi yang beredar di pasaran, dari software yang mempunyai
kemampuan yang sederhana hingga yang komplek, dari yang gratis hingga puluhan juta
rupiah. Animasi yang baik tak hanya dihasikan oleh software yang bagus, tetapi juga
bergantung pada kreatifitas para animatornya sendiri.
1.2 Tujuan
Berdasarkan permasalahan yang diteliti, maka tujuan yang akan dicapai dalam penelitian ini
adalah :
1. Dapat mensimulasikan grafis OpenGL yang didukung pemrograman Bahasa C++.
2. Dapat menunjukkan bagaimana membuat animasi 2D.kapal tenggelam
BAB II
LANDASAN TEORI
OpenGL memiliki lebih dari 200 fungsi. Fungsi tersebut bisa dikelompokkan menjadi:
Fungsi primitif, menentukan elemen yang bisa menghasilkan gambar di layar. Fungsi
ini terdiri dari 2 jenis, yaitu primitif geometric seperti polygon (segi banyak) yang
bisa dibuat menjadi dua, tiga, atau empat dimensi, dan primitif gambar seperti
bitmaps. Fungsi atribut, mengontrol tampilan dari primitif. Fungsi ini menentukan
warna, jenis garis, properti material, sumber cahaya, dan tekstur.
Cara pendefinisian primitive objek yang digunakan dalam pembuatan suatu objek :
#define GL_POINTS
Primitif objek ini dipergunakan untuk menciptakan suatu titik.
# define GL_LINES
Primitif objek ini adalah suatu primitive objek guna menciptakan suatu garis.
# define GL_LINE_LOOP
# define GL_LINE_STRIP
# define GL_TRIANGLES
Triangle atau segitiga adalah tiga buah titik yang terhubung menjadi suatu segitiga
dengan blok di tengahnya.
# define GL_TRIANGLES_STRIP
Pada triangles strip jumlah vertex yang dipergunakan adalah 4 buah vertex
# define GL_TRIANGLE_FAN
Triangles fan adalah pembuatan suatu objek dengan menggunakan segitiga dimana
hanya menggunakan 1 titik pusat saja.
# define GL_QUADS
Quad atau segempat adalah empat buah titik yang terhubung menjadi quat segi empat
dengan blok di tengahnya.
# define GL_QUADS_STRIP
Pada quads strip 4 buah vertex merupakan 1 kelompok.
# define GL_POLYGON
Polygon merupakan suatu fungsi yang mirip dengan polyline, tetapi menghasilkan
kurva tertutup dengan blok warna (fill). Rendering yang dimiliki oleh GL_POLYGON
sama dengan GL_TRIANGLE_FAN. Catatan :
a) glLineWidth yaitu suatu fungsi yang berfungsi untuk mengatur tebalnya garis,
b) glPointSize yaitu suatu fungsi yang berfungsi untuk mengatur besarnya suatu objek,
c) gluOrtho2D yaitu suatu fungsi untuk mengatur proyeksi hasil eksekusi dan
mendefinisikan besarnya sistem koordinat dengan urutan kiri-kanan dan bawah-atas.
Untuk memberi warna pada objek, seperti titik atau garis, dapat dilakukan dengan
menggunakan fungsi glColor3f(red,green,blue). Di mana red, green, blue berada pada 0
sampai dengan 1, yang menunjukkan skala pencerahan dari masing-masing skala.
Berikut adalah beberapa fungsi color :
glColor3f(0,0,0);//black
glColor3f(0,0,1);//blue
glColor3f(0,1,0);//green
glColor3f(0,1,1)//cyan
glColor3f(1,0,0)//red
glColor3f(1,0,1)//magenta
glColor3f(1,1,0);//yellow
glColor3f(1,1,1);//white
Memindahkan satu atau beberapa objek dari satu tempat ke tempat lain, ini biasa
dipakai untuk animasi komputer.
a. Translasi
b. Rotate
Ada beberapa hal mendasar yang perlu di pelajari dan di pahami untuk bisa
membuat dan mengkreasikan suatu bentuk atau bidang dalam grafika komputer.
Banyak istilah2 dasar yang familiar di telinga tp sudah tidak di temukan lagi apa
maksud dan pengertiannya," Matrik rotasi, translasi, dan seterusnya. Untuk
memindah atau merubah posisi suatu model/bentuk tidak bisa terlepas dari yang
namanya Tranformasi. Ada beberapa jenis tranformasi yaitu: Rotasi, Translasi,
Dilatasi, dan refleksi. Yang saya bahas disini adalah rotasi dan translasi.
Rotasi artinya berputar. Ketika suatu bentuk benda sengaja diputar maka perlu
di tentukan pusat dan besar sudut putar. sedangkan translasi adalah pergeseran.
Benda yang telah berpindah dari pusatnya berarti mengalami pergeseran, yaitu
apakah dia bergerak maju mundur ataupun menuju ke atas bawah.
Rotasi berbeda dengan translasi karena perubahan posisi pada translasi tidak
mengacu pada suatu titik tertentu. Keistimewaan dari rotasi adalah jarak antara titik
pusat dengan masing-masing bagian dari obyek yang diputar akan selalu tetap,
seberapa jauh pun obyek itu diputar.
Pada sebuah game yang menggunakan grafik vektor dan grafik bitmap, rotasi
dan translasi sangat di butuhkan. Dengan basic4GL kita bisa menggunakan source
code yang tersedia yaitu :
glTranslatef (x, y, z) digunakan untuk merubah titik posisi awal sumbu
koordinat menuju posisi yang ditentukan sesuai koordinat x,y, dan z.
glRotatef (angle, x, y, z) digunakan untuk memutar suatu bidang pada sudut
tertentu (angle).
Gambar 1. Translasi dan Rotasi
c. Scale
Skala merupakan salah satu bentuk transformasi yang merubah ukuran dari
objek yang ditentukan, baik membesar ataupun mengecil. Perubahan ukuran tersebut
didasarkan pada sumbu x, sumbu y, maupun sumbu z, dimana jika yang diubah
hanya sumbu x, maka besarnya objek akan berubah sesuai dengan sumbu x baru
yang telah ditentukan, begitu pula jika diubah terhadap sumbu dan zy, maka objek
akan menguikuti perubahan sesuai sumbu y maupun z baru yang telah ditentukan.
Perubahan skala diperoleh dari mengalikan nilai koordinat objek dengan skala
tertentu sesuai dengan sumbu masing - masing. Bentuk dari matriks skala adalah:
PC
Software Visual Studio 2012
BAB III
PERANCANGAN SISTEM
3.1 Storyboard
a. Scene 1
Sebuah kapal megah milik White Star Line bernama Titanic melakukan
pelayaran perdananya pada 10 April 1912. Dengan panjang 882 kaki dan
lebar 92 kaki, kapal ini berlayar dari Southampton, Inggris menuju Kota
New York.
Cuaca saat itu sangat cerah, dengan matahari terik dan sedikit awan. Dilaut
tenang tanpa ombak, Titanic berlayar dengan kecepatan tinggi. Beberapa
kapal kecil disekitarnya ikut menyaksikan.
b. Scene 2
“Titanic adalah kapal yang tidak akan mungkin tenggelam”, begitu
sebutan orang-orang saat itu. Bahkan dengan cuaca buruk sekalipun,
Titanic tetap melaju dengan kecepatan tetap
c. Scene 3
Titanic membakar 825 ton batu bara setiap harinya. Sisa pembakaran keluar
melalui 3 buah cerobong asap. 1 cerobong asap dibuat hanya sebagai dekorasi.
Titanic berlayar dilangit senja yang indah yang merupakan senja terakhir bagi
pelayaran Titanic
d. Scene 4
#include <stdlib.h>
#include <math.h>
#include<stdio.h>
#include<GL/glut.h>
#define PI 3.141592
if(samping){
gerakX+=0.5;}
else{
gerakX-=0.5;
}if(gerakX>10){
samping=false;
}else
if(gerakX<=-10){
samping=true;}
glutPostRedisplay();
glutTimerFunc(200,update,0);}
// BAGIAN YANG DITAMPILKAN PADA SCENE 1
void display1(){
glClear(GL_COLOR_BUFFER_BIT);
langit1();
matahari();
awan();
awan2();
awan3();
awan4();
awan5();
awan6();
awan7();
awan8();
awan9();
awan10();
awan11();
awan12();
awan13();
awan14();
awan15();
glPushMatrix();
glTranslated(a,75,0.0);
tiang1();
badanKapal1();
badanKapal2();
badanKapal3();
badanKapal4();
badanKapal5();
badanKapal6();
badanKapal7();
badanKapal8();
badanKapal9();
badanKapal10();
badanKapal11();
badanKapal12();
badanKapal13();
badanKapal14();
badanKapal15();
badanKapal16();
badanKapal17();
badanKapal18();
badanKapal19();
badanKapal20();
badanKapal21();
badanKapal22();
badanKapal23();
cerobong11();
cerobong12();
cerobong21();
cerobong22();
cerobong31();
cerobong33();
cerobong41();
cerobong42();
tiang2();
glPopMatrix();
laut1();
badankapalkecil1();
badankapalkecil2();
badankapalkecil3();
badankapalkecil4();
layarkapal1();
layarkapal2();
layarkapal3();
layarkapal4(); }
void display2(){
glClear(GL_COLOR_BUFFER_BIT);
langit2();
laut2();
glPushMatrix();
glTranslated(b,75,0.0);
tiang1();
badanKapal1();
badanKapal2();
badanKapal3();
badanKapal4();
badanKapal5();
badanKapal6();
badanKapal7();
badanKapal8();
badanKapal9();
badanKapal10();
badanKapal11();
badanKapal12();
badanKapal13();
badanKapal14();
badanKapal15();
badanKapal16();
badanKapal17();
badanKapal18();
badanKapal19();
badanKapal20();
badanKapal21();
badanKapal22();
badanKapal23();
cerobong11();
cerobong12();
cerobong21();
cerobong22();
cerobong31();
cerobong33();
cerobong41();
cerobong42();
tiang2();
glPopMatrix();
hujan();
tetesan();}
glClear(GL_COLOR_BUFFER_BIT);
langit3();
awan();
awan2();
awan3();
awan4();
awan5();
awan6();
awan10();
awan11();
awan12();
awan13();
awan14();
awan15();
glPushMatrix();
glTranslated(c,75,0.0);
tiang1();
badanKapal1();
badanKapal2();
badanKapal3();
badanKapal4();
badanKapal5();
badanKapal6();
badanKapal7();
badanKapal8();
badanKapal9();
badanKapal10();
badanKapal11();
badanKapal12();
badanKapal13();
badanKapal14();
badanKapal15();
badanKapal16();
badanKapal17();
badanKapal18();
badanKapal19();
badanKapal20();
badanKapal21();
badanKapal22();
badanKapal23();
cerobong11();
cerobong12();
asapcerobong1();
cerobong21();
cerobong22();
asapcerobong2();
cerobong31();
cerobong33();
asapcerobong3();
cerobong41();
cerobong42();
tiang2();
glPopMatrix();
laut3();}
4.2 Hasil
4.3 Analisa
Analisa program terbagi menjadi 5 bagian, yaitu :
4.3.1 Kapal Titanic
Kapal Titanic pada animasi ‘Kapal Tenggelam’ merupakan bentuk kompleks dari
primitive objek yang terdiri dari beberapa gabungan objek primitive. Pembuatan kapal
terbagi atas badan kapal, tiang dan cerobong asap.
1. Badan Kapal
Badan kapal terbagi menjadi 3 bagian :
- Depan
- Tengah
- Belakang
- Lekukan bagian paling belakang
Awal pembuatannya dimulai pada bagian depan dengan objek sembarang. Kemudian
pada bagian tengah dibuat dari gabungan beberapa segitiga. Kemudian bagian belakang
dibentuk dari persegi. Terakhir, lekukan paling belakang dibuat dari 1 buah segitiga dan
1 buah bangun sembarang.
2. Bagian Atas
Bagian atas kapal terbuat dari objek persegi dan objek sembarang. Untuk membuat
garis outline (luar), menggunakan perintah GL_LINE_STRIP yang fungsi sudah
dijelaskan pada BAB II.
Penggalan kode :
glBegin(GL_POLYGON); // Membuat bagian dalam (fill)
glColor3f(1.0,1.0,1.0);
glVertex2f (-35.0, 30.0);
glVertex2f (-130.0, 30.0);
glVertex2f (-130.0, 10);
glVertex2f (-35.0, 10);
glEnd();
Outline Fill
3. Tiang Kapal
Tak jauh berbeda dengan yang diatas, kedua tiang pada kapal juga dibentuk dari
objek persegi
4. Cerobong Asap
Cerobong asap dibuat dari 2 buah objek. Warna hitam dan warna emas
Bagian 2
Bagian 1
4.3.2 Objek Tambahan
Selain objek utamanya yaitu Kapal Titanic, berikut berupa objek tambahan :
1. Langit
Ada 5 scene pada animasi dengan warna 4 langit yang berbeda, kode dibawah untuk
membuat langit pada scene 1
2. Laut
Sama seperti membuat langit, terdapat 4 warna laut berbeda yang dibuat dengan
perintah GL_POLYGON. Perubahan dilakukan pada nilai vertex dan permberian
warna
3. Matahari
Matahari terletak pada scene 1. Dengan kode program :
glColor3f(1.0,1.0,0.0);
glBegin(GL_POLYGON);
for(i=0; i<=360; i++){ // banyaknya titik yang membentuk matahari
float sudut = i+(PI/360); // sudut 360 untuk membentuk lingkaran
float x = 100*cos(sudut); // besar sudut untuk sumbu x
float y = 160*sin(sudut); // besar sudut untuk sumbu y
glVertex2f(x-200,y+400);} // menentukan letak matahari
4. Awan
Awan dibuat dari gabungan beberapa lingkaran. Cara membuatnya sama dengan
membuat matahari
5. 4 buah kapal kecil pada scene 1
Dibuat dari objek trapesium dan segitiga.
// Membuat badan kapal kecil
glColor3f(1.0,1.0,1.0); // untuk warna putih
glVertex2f (-420.0, -440.0); // untuk membuat trapesium, nilai pada
glVertex2f (-380.0, -440.0); // keempat vertex koordinat x dibuat
glVertex2f (-385.0, -460); // berbeda
glVertex2f (-415.0, -460);
glEnd();
6. Gunung Es
Bentuk gunung es yang tak beraturan dibentuk dari 12 vertex2f yang menghasilkan
bentuk segi banyak. Dengan melakukan perubahan pada nilai vertex, bentuk tak
beraturan pun dihasilkan. Berikut kodenya :
glBegin(GL_POLYGON);
glVertex2f(7.5,-15.5);
glVertex2f(1,8);
glVertex2f(1.25,20.5);
glVertex2f(5.5,26.5);
glVertex2f(5,25);
glVertex2f(10.5,26.5);
glVertex2f(15,25.5);
glVertex2f(15.5,21.5);
glVertex2f(17.5,20.5);
glVertex2f(18.5,1.5);
glVertex2f(19,5);
glVertex2f(19.5,-15.5);
void hujan(void){
float xp,yp,xp2,yp2; //mendefinisi variabel sumbu x dan y
for(int i=0;i<500;i++){ //kepadatan garis dengan jumlah tak hingga
xp=-1200*(float)rand()/RAND_MAX; //letak pada koordinat x1
yp=-300+1880*(float)rand()/RAND_MAX; //letak pada koordinat y1
xp2=1200*(float)rand()/RAND_MAX; //letak pada koordinat x2
yp2=-300+1880*(float)rand()/RAND_MAX; //letak pada koordinat y2
glColor3f(1,1,1); // warna putih untuk hujan
glBegin(GL_LINES); // membuat bentuk garis
glVertex2f(10+xp,10+yp); // letak dari koordinat x dan y
glVertex2f(xp+20,yp-10);
glVertex2f(10+xp2,10+yp2);
glVertex2f(xp2+20,yp2-10);
glEnd();
Pada penggalan kode diatas, terdapat variabel xp=x1, yp=y1, xp2=x2 dan yp2=y2.
Variabel xp dan yp saja tak menutupi seluruh layar windows. Sehingga efek hujan hanya
setengah layar. Karena itu menggunakan xp2 dan yp2 untuk menutupi lagi bagian
sisanya.
RAND_MAX digunakan agar garis yang dibuat bergerak secara random (acak).
Dan for(int i=0;i<500;i++){ pengulangan yang membuat garis terus ada tanpa habis.
Hal diatas juga berlaku untuk membuat asap pada cerobong. Hanya saja asap bukan
dibuat dengan garis, melainkan titik menggunakan GL_POINTS.
Membuat bintang berkelip sedikit berbeda. Mulanya bintang dibuat dengan objek
titik. Berikut penggalan kodenya :
glBegin(GL_POINTS); // Bintang Kecil
glColor3f(1.0, 1.0, 1.0);
glVertex2i(-123, 160);
glVertex2i(-224, 165);
glVertex2i(-345, 280);
glVertex2i(-446, 260);
void userdraw(void) {
int s; // ukuran titik
float x,y; // posisi titik
glColor3f(0.0,0.0,0.0);
for(int i=0;i<500;i++){
s=rand()%4+1;
glPointSize(s);
glBegin(GL_POINTS);
x=(float)rand()/RAND_MAX; // tak perlu membuat nilai koordinat x dan y
y=(float)rand()/RAND_MAX;
glVertex2f(x,y);
glEnd();
Setelah itu, pada saat merender, fungsi userdraw terletak dibelakang dari fungsi bintang.
Hal itu akan menghasilkan efek bintang berkelip.
glTranslated(450,50,0.0);
Dan Rotate digunakan dengan memakai perintah
glRotated(-15,0,0,1);
Agar objek yang ber-Translasi dan ber-Rotasi tidak berubah bentuk, menggunakan
fungsi :
- glPopMatrix = suatu fungsi guna memanggil suatu fungsi yang telah disimpan pada
glPushMatrix.
GLint a=0,b=0,c=0,d=0,e=0,x=100,i=0;
GLfloat theta=0.0;
void display()
{
display1(); // a merupakan variabel yang merujuk ke display1
if(a>950){ // jika a terletak pada koordinat 950, maka
b+=20; // menampilkan display2 yang ditandai dengan
display2(); // variabel b
}
if(b>950 ){ // begitulah seterusnya sampai mencapai display5
c+=10;
display3();
}
if(c>950 ){
d+=10;
display4();
}
if(d>950 ){
e+=10;
display5();
}
glFlush();
glutSwapBuffers();
}
Agar setiap display dapat menampilkan objek-objek, setiap display merender objek apa
saja yang akan ditampilkan. Seperti pada penggalan kode dibawah :
void display1()
{
glClear(GL_COLOR_BUFFER_BIT);
langit1();
matahari();
awan();
awan2();
awan3();
// dan seterusnya...
KESIMPULAN
5.1 Kesimpulan
1. Objek
Dapat berupa titik, garis, bangun datar maupun gabungan dari kesemuanya
2. Pemberian Warna
Warna dapat berupa warna solid maupun gradasi
3. Transformasi
Berupa perpindahan, perputaran maupun perubahan ukuran