Академический Документы
Профессиональный Документы
Культура Документы
“KERETA MALAM”
Oleh :
Dany Dwi Prayoga/1107114098
PROGRAM STUDI S1
TELKOM UNIVERSITY
2014
BAB I
PENDAHULUAN
1
1.2 Rumusan Masalah
Perumusan masalah pada tugas grafika komputer ini yaitu:
1. Bagaimana mensimulasikan grafis OpenGL yang didukung pemrograman
Visual C++.
2. Bagaimana membuat animasi kereta api dalam bentuk 2 dimensi.
1.3 Maksud dan Tujuan
Berdasarkan permasalahan yang diteliti, maka tujuan yang akan dicapai
dalam penelitian ini adalah :
1. Dapat mensimulasikan grafis OpenGL yang didukung pemrograman Visual
C++.
2. Dapat menunjukkan pergerakan kereta api dengan latar belakang stasiun dan
langit malam dalam bentuk grafik.
1.4 Batasan Masalah
Pembatasan masalah dilakukan agar penulisan tugas ini dapat memberikan
pemahaman yang terarah dan sesuai dengan yang diharapkan. Agar pembahasan
tidak menyimpang dari pokok perumusan masalah yang ada, maka penulis
membatasi permasalahan pada :
1. Pemrograman hanya menggunakan bahasa C++
2. Menunjukan pergerakan kereta api dengan latar belakang stasiun dan langit
malam dengan animasi 2D
3. Terdapat 1 kereta api dengan 3 gerbong yang dapat bergerak ke kiri dan ke
kanan.
1.5 Metodologi Penelitian
Metodologi yang digunakan dalam penulisan tugas ini adalah sebagai berikut :
1. Tahap pengumpulan data
Metode pengumpulan data yang digunakan dalam penelitian ini adalah sebagai
berikut :
a. Studi Literatur.
Pengumpulan data dengan cara mengumpulkan literatur, jurnal, paper dan
bacaan-bacaan yang ada kaitannya dengan judul penelitian.
b. Observasi.
2
Teknik pengumpulan data dengan mengadakan penelitian dan peninjauan
langsung terhadap permasalahan yang diambil.
c. Interview.
Teknik pengumpulan data dengan mengadakan tanya jawab secara
langsung yang ada kaitannya dengan topik yang diambil.
2. Tahap pembuatan perangkat lunak dengan SDLC (Systems Development Life
Cycle)
Metode penelitian dalam tugas ini menggunakan SDLC (System Development
Life Cycle) yaitu proses logis yang digunakan oleh analis sistem untuk
menggambarkan sebuah sistem informasi, termasuk di dalamnya persyaratan,
validasi, pelatihan dan kepemilikan. SDLC merupakan siklus pengembangan
sistem. Pengembangan sistem teknik (engineering system development).
Meliputi langkah berikut:
a. Planning / perencanaan
Untuk menghasilkan perangkat lunak (software) yang berkualitas perlu
dilakukan perencanaan yang matang dengan melakukan studi kelayakan.
Studi kelayakan yang dilakukan meliputi : ekonomi, operasional, dan
teknis.
b. Analisa
Tujuan dari analisa sistem adalah untuk menentukan masalah upaya untuk
memperbaiki sistem. Sehingga diharapkan dengan dilakukannya analisa
sitem, maka permasalahan yang ada akan dapat teratasi.
c. Desain
System design menguraikan layar layout, aturan bisnis, proses diagram
dan dokumentasi lainnya. Hasil dari tahap ini akan menjelaskan sistem
baru sebagai kumpulan modul atau subsistem.
d. Implementasi (Build and Coding)
Pada tahapan ini dilakukan implementasi dari perancangan dan desain
yang telah dilakukan. Sehingga pada tahap ini menghasilkan suatu
perangkat lunak (software).
e. Testing / Pengujian
3
Setelah perangkat lunak dibangun, maka dilakukan pengujian untuk
menguji tingkat kehandalan perangkat lunak yang telah dibangun. Hal ini
dilakukan untuk memastikan kehandalan software.
f. Pemeliharaan / Mintenance
Pemeliharaan merupakan tahap penting dalam SDLC. Tahap ini dilakukan
untuk memperbaiki sistem yang telah dibangun. Selain itu tahapan ini juga
untuk penambahan dan perubahan sistem.
1.6 Sistematika Penelitian
Sistematika penulisan proposal penelitian ini disusun untuk memberikan
gambaran umum tentang penelitian yang dijalankan. Sistematika secara umum
adalah sebagai berikut :
BAB I PENDAHULUAN
Menguraikan tentang dasar-dasar pemikiran yang berisi tentang latar belakang
masalah, perumusan masalah, maksud dan tujuan, batasan masalah, metode
penelitian, serta sistematika penulisan.
BAB II TINJAUAN PUSTAKA
Bab ini memaparkan tentang teori-teori yang berkaitan dengan topik dan
menunjang dalam perancangan sistem yang digunakan sebagai acuan dalam
pembuatan perangkat lunak.
BAB III PEMBAHASAN
Pada bab ini dijelaskan langkah-langkah perancangan dan pembuatan animasi
yang dibuat
BAB IV KESIMPULAN DAN SARAN
Berisi kesimpulan dan saran yang sudah diperoleh dari hasil penulisan tugas.
4
BAB II
TINJAUAN PUSTAKA
5
Berikut adalah primitive objek yang akan dipergunakan didalam 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.Pada penggunaan primitive objek ini kita
harus menggunakan minimal 3 buah vertex guna membentuk suatu objek.
# 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 suatu
segempat dengan blok di tengahnya.
# define GL_QUADS_STRIP
Pada quads strip 4 buah vertex merupakan 1 kelompok.Langkah rendering
pada quads strip :
a. Nomor yang berhadap (membentuk 2 garis yang sejajar)
b. Nomor ganjil dengan nomor ganjil dipertemukan
c. Nomor genap dengan nomor genap dipertemukan
d. Garis yang tersisa akan dipertemukan
# 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
6
2.3. Transformasi
Transformasi merupakan suatu metode untuk mengubah lokasi suatu titik
pembentukobjek, sehingga objek tersebut mengalami perubahan. Perubahan objek
dengan mengubahkoordinat dan ukuran suatu objek disebut dengan transformasi
geometri. Dalam Transformasi dasar yang akan dibahas meliputi translasi, skala,
dan rotasi.
2.3.1 Translasi
Translasi berarti memindahkan objek sepanjang garis lurus dari suatu
lokasi koordinattertentu kelokasi yang lain tanpa mengubah bentuk objek.
Bila suatu objek terbentuk daribeberapa titik maka bila melakukan
translasi akan dikenakan terhadap setiap titikpembentuk objek tersebut.
2.3.2 Skala
Skala digunakan untuk mengubah ukuran suatu objek, bila pada translasi
operasi yangdigunakan adalah penjumlahan sedangkan pada skala operasi
yang digunakan adalah perkalian.
2.3.3 Rotasi
Rotasi merupakan pemutaran terhadap suatu objek, rotasi dapat dinyatakan
dalam bentukmatriks. Nilai matriks untuk melakukan rotasi adalah Rotasi
suatu titik terhadap pivot point (xp, yp) menggunakan bentuk trigonometri,
1. Viewport Transformation
2. Viewing Transformation
3. Projection Transformation
4. Modelling Transformation
2.4. Blending
Blending merupakan menggabungkan nilai intensitas warna dari sumber
(source) dan tujuan (destination/object) atau mengkombinasikan warna output
fragment dengan warna output fragment yang dirender sebelumnya ke frame
buffer.
7
Source and Destination Factor :
• Blending colors
8
BAB III
PEMBAHASAN
9
r--;
if(r==-1200){
ujung=0;}
}
else
if (r<600 && ujung==0){
r++;
if (r==600){
ujung = 1;}
}
glutPostRedisplay();
glutTimerFunc(0,timer,0);
}
void display(){ Void untuk mengatur urutan
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix(); tampilan objek yang telah dibuat
latar();
glTranslatef(r,0,0);
kereta();
glPopMatrix();
stopan();
glFlush();
}
10
Gambar 2. Tampilan saat kereta sudah pergi
11
Gambar 4. Tampilan keseluruhan kereta
12
BAB IV
KESIMPULAN DAN SARAN
4.1. Kesimpulan
Dengan menggunakan OpenGL ini dalam pembuatan animasi Kereta Malam
dapat disimpulkan :
1. Merepresentasikan gambar 2D pada animasi Kereta Malam yang telah dibuat.
2. Dengan menggunakan OpenGL ini terlihat jelas seperti apa tekstur-tekstur
yang dihasilkan. Seperti tekstur pada garis miring yang terdapat di lantai
stasiun dan gerbong kereta.
4.2. Saran
Dalam perancangan animasi Kereta Malam ini, diharapkan dapat membantu
memudahkan dalam pembelajaran mengenai openGl dan fitur-fitur Visual C++
lainnya khususnya di bidang mata kuliah Grafika Komputer.
13
LAMPIRAN SOURCE CODE
#include <windows.h>
#include <gl/glut.h>
#include <math.h>
int i;
const double PI = 3.14;
void lingkaran(int jari2, int jumlah_titik, int x_tengah, int y_tengah) {
glBegin(GL_POLYGON);
for (i=0;i<=360;i++){
float sudut=i*(2*PI/jumlah_titik);
float x=x_tengah+jari2*cos(sudut);
float y=y_tengah+jari2*sin(sudut);
glVertex2f(x,y);
}
glEnd();
}
void bintang(){
glBegin(GL_POLYGON);
glVertex2f(7.7,7);
glVertex2f(8,14.6);
glVertex2f(9.9,9);
glVertex2f(15.7,9);
glVertex2f(11,5.5);
glVertex2f(12.8,0.1);
glVertex2f(8,3.4);
glVertex2f(3.2,0.1);
glVertex2f(5.4,5.5);
glVertex2f(0.3,9);
glVertex2f(6.3,9);
glVertex2f(8,14.6);
glEnd();
}
int r=1;
14
int ujung=1;
void timer(int value){
if (ujung==1 && r>-1200){
r--;
if(r==-1200){
ujung=0;}
}
else
if (r<600 && ujung==0){
r++;
if (r==600){
ujung = 1;}
}
glutPostRedisplay();
glutTimerFunc(0,timer,0);
}
void latar(){
glClearColor(0.1f, 0.1f, 0.1f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
//#REL#
//tanah
glBegin(GL_QUADS);
glColor3f(0.9, 0.9, 0.5);
glVertex2i(0, -450);
glVertex2i(800, -450);
glColor3f(0.8, 0.8, 0.9);
glVertex2i(800, -500);
glVertex2i(0, -500);
glEnd();
//dasar rel
glBegin(GL_QUADS);
glColor3f(0.3, 0.3, 0.1);
glVertex2i(0, -450);
glVertex2i(0, -425);
glVertex2i(800, -425);
glVertex2i(800, -450);
glEnd();
15
//rel
glBegin(GL_QUADS);
glColor3f(0.3, 0.3, 0.3);
glVertex2i(0, -430);
glVertex2i(0, -435);
glVertex2i(800, -435);
glVertex2i(800, -430);
glEnd();
glBegin(GL_QUADS);
glColor3f(0.3, 0.3, 0.3);
glVertex2i(0, -440);
glVertex2i(0, -445);
glVertex2i(800, -445);
glVertex2i(800, -440);
glEnd();
//pembatas rel
glBegin(GL_QUADS);
glColor3f(0.2, 0.2, 0.2);
glVertex2i(0, -420);
glVertex2i(0, -425);
glColor3f(0.3, 0.3, 0.1);
glVertex2i(800, -425);
glVertex2i(800, -420);
glEnd();
//#STASIUN#
//atap
glBegin(GL_QUADS);
glColor3f(0.75, 0.1, 0.0);
glVertex2i(450, -175);
glVertex2i(800, -175);
glColor3f(1.0, 0.5, 0.0);
glVertex2i(800, -225);
glVertex2i(400, -225);
glEnd();
//tembok
glBegin(GL_QUADS);
glColor3f(0.5, 0.5, 0.2);
glVertex2i(425, -225);
16
glVertex2i(800, -225);
glVertex2i(800, -360);
glVertex2i(425, -360);
glEnd();
//lampu stasiun
glBegin(GL_LINES);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(480, -226);
glVertex2i(480, -250);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f(0.2, 0.2, 0.2);
glVertex2i(480, -249);
glVertex2i(490, -275);
glVertex2i(470, -275);
glEnd();
glBegin(GL_QUADS);
glColor3f(0.8, 0.8, 0.0);
glVertex2i(470, -275);
glVertex2i(490, -275);
glColor3f(0.5, 0.5, 0.2);
glVertex2i(500, -290);
glVertex2i(460, -290);
glEnd();
//lantai
glBegin(GL_QUADS);
glColor3f(0.8, 0.8, 0.8);
glVertex2i(325, -420);
glVertex2i(395, -360);
glVertex2i(800, -360);
glVertex2i(800, -420);
glEnd();
glBegin(GL_LINES);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(325, -420);
glVertex2i(395, -360);
glVertex2i(395, -360);
glVertex2i(800, -360);
17
glEnd();
glBegin(GL_QUADS);
glColor3f(0.2, 0.2, 0.2);
glVertex2i(340, -420);
glVertex2i(800, -420);
glColor3f(0.8, 0.8, 0.8);
glVertex2i(800, -372);
glVertex2i(400, -372);
glEnd();
glBegin(GL_LINES);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(340, -420);
glVertex2i(400, -372);
glVertex2i(400, -372);
glVertex2i(800, -372);
glEnd();
//tiang
glBegin(GL_QUADS);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(534, -385);
glVertex2i(534, -225);
glVertex2i(540, -225);
glVertex2i(540, -385);
glEnd();
glBegin(GL_QUADS);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(529, -400);
glVertex2i(529, -385);
glVertex2i(545, -385);
glVertex2i(545, -400);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(537, -250);
glVertex2i(530, -225);
glVertex2i(545, -225);
glEnd();
glBegin(GL_QUADS);
18
glColor3f(0.0, 0.0, 0.0);
glVertex2i(684, -385);
glVertex2i(684, -225);
glVertex2i(690, -225);
glVertex2i(690, -385);
glEnd();
glBegin(GL_QUADS);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(679, -400);
glVertex2i(679, -385);
glVertex2i(695, -385);
glVertex2i(695, -400);
glEnd();
glBegin(GL_TRIANGLES);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(687, -250);
glVertex2i(680, -225);
glVertex2i(695, -225);
glEnd();
//pintu stasiun
glColor3f(0.0, 0.0, 0.0);
lingkaran(35, 100, 612.5, -275);
glBegin(GL_QUADS);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(577, -360);
glVertex2i(577, -275);
glVertex2i(647, -275);
glVertex2i(647, -360);
glEnd();
glColor3f(0.8, 0.8, 0.0);
lingkaran(32, 100, 612, -275);
glBegin(GL_QUADS);
glColor3f(0.8, 0.8, 0.0);
glVertex2i(580, -360);
glVertex2i(580, -275);
glVertex2i(644, -275);
glVertex2i(644, -360);
glEnd();
19
//jendela stasiun
glBegin(GL_QUADS);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(712, -257);
glVertex2i(712, -313);
glVertex2i(783, -313);
glVertex2i(783, -257);
glEnd();
glBegin(GL_QUADS);
glColor3f(0.8, 0.8, 0.0);
glVertex2i(725, -260);
glVertex2i(725, -310);
glVertex2i(770, -310);
glVertex2i(770, -260);
glEnd();
glBegin(GL_LINES);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(748, -311);
glVertex2i(748, -259);
glVertex2i(725, -285);
glVertex2i(771, -285);
glEnd();
//#LANGIT#
//bulan
glColor3f(0.9, 0.9, 0.0);
lingkaran(25, 100, 75, -75);
glColor3f(0.1, 0.1, 0.1);
lingkaran(25, 100, 90, -80);
//bintang
glPushMatrix();
glRotatef(10,0,0,1);
glTranslatef(175,-80,0);
glColor3f(1,1,1);
bintang();
glRotatef(10,0,0,1);
glTranslatef(200,-100,0);
glColor3f(1,1,1);
bintang();
20
glRotatef(10,0,0,1);
glTranslatef(225,-90,0);
glColor3f(1,1,1);
bintang();
glPopMatrix();
//bintang kecil
glBegin(GL_POINTS);
glColor3f(1.0, 1.0, 1.0);
glVertex2i(123, -60);
glVertex2i(224, -65);
glVertex2i(345, -80);
glVertex2i(446, -60);
glVertex2i(547, -55);
glVertex2i(660, -75);
glVertex2i(713, -77);
glVertex2i(134, -78);
glVertex2i(255, -52);
glVertex2i(366, -69);
glVertex2i(467, -74);
glVertex2i(578, -50);
glVertex2i(689, -45);
glVertex2i(767, -69);
glVertex2i(159, -57);
glVertex2i(274, -65);
glVertex2i(315, -80);
glVertex2i(486, -45);
glVertex2i(518, -50);
glVertex2i(615, -64);
glVertex2i(739, -63);
glEnd();
}
void kereta(){
//roda
glColor3f(0.0, 0.0, 0.0);
lingkaran(6, 50, 330, -436);
lingkaran(6, 50, 345, -436);
lingkaran(6, 50, 405, -436);
21
lingkaran(6, 50, 420, -436);
lingkaran(6, 50, 500, -436);
lingkaran(6, 50, 515, -436);
lingkaran(6, 50, 548, -436);
lingkaran(6, 50, 563, -436);
lingkaran(6, 50, 638, -436);
lingkaran(6, 50, 653, -436);
lingkaran(6, 50, 753, -436);
lingkaran(6, 50, 768, -436);
lingkaran(6, 50, 801, -436);
lingkaran(6, 50, 816, -436);
lingkaran(6, 50, 901, -436);
lingkaran(6, 50, 916, -436);
lingkaran(6, 50, 1031, -436);
lingkaran(6, 50, 1016, -436);
//gerbong 1
glBegin(GL_POLYGON);
glColor3f (0.3,0.5,0.3);
glVertex2i(280, -400);
glVertex2i(305, -345);
glVertex2i(315, -340);
glVertex2i(520, -340);
glVertex2i(530, -350);
glVertex2i(530, -400);
glEnd();
glBegin(GL_POLYGON);
glColor3f (0.85,0.85,0.85);
glVertex2i(310, -430);
glVertex2i(310, -440);
glVertex2i(295, -440);
glVertex2i(280, -400);
glVertex2i(530, -400);
glVertex2i(530, -430);
glEnd();
//gerbong 2
glBegin(GL_POLYGON);
glColor3f (0.3,0.5,0.3);
glVertex2i(533, -400);
22
glVertex2i(533, -350);
glVertex2i(543, -340);
glVertex2i(773, -340);
glVertex2i(783, -350);
glVertex2i(783, -400);
glEnd();
glBegin(GL_POLYGON);
glColor3f (0.85,0.85,0.85);
glVertex2i(533, -430);
glVertex2i(533, -400);
glVertex2i(783, -400);
glVertex2i(783, -430);
glEnd();
//gerbong 3
glBegin(GL_POLYGON);
glColor3f (0.3,0.5,0.3);
glVertex2i(786, -400);
glVertex2i(786, -350);
glVertex2i(796, -340);
glVertex2i(1046, -340);
glVertex2i(1076, -370);
glVertex2i(1076, -400);
glEnd();
glBegin(GL_POLYGON);
glColor3f (0.85,0.85,0.85);
glVertex2i(786, -430);
glVertex2i(786, -400);
glVertex2i(1076, -400);
glVertex2i(1056, -430);
glEnd();
//sambungan gerbong
glBegin(GL_QUADS);
glColor3f (0.2,0.2,0.2);
glVertex2i(530, -425);
glVertex2i(530, -350);
glVertex2i(533, -350);
glVertex2i(533, -425);
glEnd();
23
glBegin(GL_QUADS);
glColor3f (0.2,0.2,0.2);
glVertex2i(783, -425);
glVertex2i(783, -350);
glVertex2i(786, -350);
glVertex2i(786, -425);
glEnd();
//as roda
glBegin(GL_QUADS);
glColor3f (0.5,0.5,0.5);
glVertex2i(312, -432);
glVertex2i(312, -435);
glVertex2i(530, -435);
glVertex2i(530, -432);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.5,0.5,0.5);
glVertex2i(533, -432);
glVertex2i(533, -435);
glVertex2i(783, -435);
glVertex2i(783, -432);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.5,0.5,0.5);
glVertex2i(786, -432);
glVertex2i(786, -435);
glVertex2i(1056, -435);
glVertex2i(1056, -432);
glEnd();
//garis warna
//biru
glBegin(GL_QUADS);
glColor3f (0.0,0.0,0.3);
glVertex2i(365, -410);
glVertex2i(370, -405);
glVertex2i(530, -405);
glVertex2i(530, -410);
glEnd();
24
glBegin(GL_QUADS);
glColor3f (0.0,0.0,0.3);
glVertex2i(533, -410);
glVertex2i(533, -405);
glVertex2i(783, -405);
glVertex2i(783, -410);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.0,0.0,0.3);
glVertex2i(786, -410);
glVertex2i(786, -405);
glVertex2i(975, -405);
glVertex2i(980, -410);
glEnd();
//merah
glBegin(GL_QUADS);
glColor3f (0.7,0.0,0.0);
glVertex2i(302, -423);
glVertex2i(300, -418);
glVertex2i(530, -418);
glVertex2i(530, -423);
glEnd();
glBegin(GL_QUADS);
glColor3f(0.7,0.0,0.0);
glVertex2i(533, -423);
glVertex2i(533, -418);
glVertex2i(783, -418);
glVertex2i(783, -423);
glEnd();
glBegin(GL_QUADS);
glColor3f(0.7,0.0,0.0);
glVertex2i(786, -423);
glVertex2i(786, -418);
glVertex2i(1050, -418);
glVertex2i(1045, -423);
glEnd();
//jendela kereta
glBegin(GL_TRIANGLES);
25
glColor3f (0.7,0.7,0.4);
glVertex2i(297, -390);
glVertex2i(315, -355);
glVertex2i(315, -390);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.7,0.7,0.4);
glVertex2i(370, -390);
glVertex2i(370, -355);
glVertex2i(395, -355);
glVertex2i(395, -390);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.7,0.7,0.4);
glVertex2i(410, -390);
glVertex2i(410, -355);
glVertex2i(435, -355);
glVertex2i(435, -390);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.7,0.7,0.4);
glVertex2i(450, -390);
glVertex2i(450, -355);
glVertex2i(475, -355);
glVertex2i(475, -390);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.7,0.7,0.4);
glVertex2i(490, -390);
glVertex2i(490, -355);
glVertex2i(515, -355);
glVertex2i(515, -390);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.7,0.7,0.4);
glVertex2i(595, -390);
glVertex2i(595, -355);
glVertex2i(620, -355);
26
glVertex2i(620, -390);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.7,0.7,0.4);
glVertex2i(640, -390);
glVertex2i(640, -355);
glVertex2i(665, -355);
glVertex2i(665, -390);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.7,0.7,0.4);
glVertex2i(685, -390);
glVertex2i(685, -355);
glVertex2i(710, -355);
glVertex2i(710, -390);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.7,0.7,0.4);
glVertex2i(800, -390);
glVertex2i(800, -355);
glVertex2i(825, -355);
glVertex2i(825, -390);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.7,0.7,0.4);
glVertex2i(850, -390);
glVertex2i(850, -355);
glVertex2i(875, -355);
glVertex2i(875, -390);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.7,0.7,0.4);
glVertex2i(900, -390);
glVertex2i(900, -355);
glVertex2i(925, -355);
glVertex2i(925, -390);
glEnd();
27
glBegin(GL_QUADS);
glColor3f (0.7,0.7,0.4);
glVertex2i(950, -390);
glVertex2i(950, -355);
glVertex2i(975, -355);
glVertex2i(975, -390);
glEnd();
glBegin(GL_POLYGON);
glColor3f (0.7,0.7,0.4);
glVertex2i(1035, -390);
glVertex2i(1035, -355);
glVertex2i(1047, -355);
glVertex2i(1060, -368);
glVertex2i(1060, -390);
glEnd();
//pintu kereta
glBegin(GL_LINES);
glColor3f (0.5,0.5,0.5);
glVertex2i(325, -350);
glVertex2i(325, -415);
glVertex2i(325, -415);
glVertex2i(355, -415);
glVertex2i(355, -415);
glVertex2i(355, -350);
glVertex2i(355, -350);
glVertex2i(325, -350);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.5,0.5,0.5);
glVertex2i(330, -355);
glVertex2i(330, -395);
glVertex2i(350, -395);
glVertex2i(350, -355);
glEnd();
glBegin(GL_LINES);
glColor3f (0.5,0.5,0.5);
glVertex2i(545, -350);
glVertex2i(545, -415);
28
glVertex2i(545, -415);
glVertex2i(575, -415);
glVertex2i(575, -415);
glVertex2i(575, -350);
glVertex2i(575, -350);
glVertex2i(545, -350);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.5,0.5,0.5);
glVertex2i(550, -355);
glVertex2i(550, -395);
glVertex2i(570, -395);
glVertex2i(570, -355);
glEnd();
glBegin(GL_LINES);
glColor3f (0.5,0.5,0.5);
glVertex2i(740, -350);
glVertex2i(740, -415);
glVertex2i(740, -415);
glVertex2i(770, -415);
glVertex2i(770, -415);
glVertex2i(770, -350);
glVertex2i(770, -350);
glVertex2i(740, -350);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.5,0.5,0.5);
glVertex2i(745, -355);
glVertex2i(745, -395);
glVertex2i(765, -395);
glVertex2i(765, -355);
glEnd();
glBegin(GL_LINES);
glColor3f (0.5,0.5,0.5);
glVertex2i(990, -350);
glVertex2i(990, -415);
glVertex2i(990, -415);
glVertex2i(1020, -415);
29
glVertex2i(1020, -415);
glVertex2i(1020, -350);
glVertex2i(1020, -350);
glVertex2i(990, -350);
glEnd();
glBegin(GL_QUADS);
glColor3f (0.5,0.5,0.5);
glVertex2i(995, -355);
glVertex2i(995, -395);
glVertex2i(1015, -395);
glVertex2i(1015, -355);
glEnd();
}
void stopan(){
//dasar
glBegin(GL_QUADS);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(64, -471);
glVertex2i(64, -465);
glVertex2i(112, -465);
glVertex2i(112, -471);
glEnd();
//pondasi
glBegin(GL_POLYGON);
glColor3f(0.2, 0.2, 0.2);
glVertex2i(92, -465);
glVertex2i(92, -455);
glVertex2i(93, -455);
glVertex2i(93, -440);
glVertex2i(94, -440);
glVertex2i(94, -430);
glVertex2i(106, -430);
glVertex2i(106, -440);
glVertex2i(107, -440);
glVertex2i(107, -455);
glVertex2i(108, -455);
glVertex2i(108, -465);
30
glEnd();
//tiang
glBegin(GL_QUADS);
glColor3f(1.0, 1.0, 1.0);
glVertex2i(98, -431);
glVertex2i(98, -251);
glVertex2i(102, -251);
glVertex2i(102, -431);
glEnd();
glBegin(GL_LINES);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(98, -431);
glVertex2i(98, -251);
glVertex2i(102, -251);
glVertex2i(102, -431);
glEnd();
//kabel
glBegin(GL_QUADS);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(72, -465);
glVertex2i(70, -465);
glVertex2i(90, -251);
glVertex2i(92, -251);
glEnd();
glBegin(GL_QUADS);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(102, -251);
glVertex2i(102, -247);
glVertex2i(90, -247);
glVertex2i(90, -251);
glEnd();
//lampu
glBegin(GL_POLYGON);
glColor3f(0.0, 0.0, 0.0);
glVertex2i(95, -251);
glVertex2i(95, -200);
glVertex2i(130, -200);
glVertex2i(120, -210);
31
glVertex2i(120, -225);
glVertex2i(130, -225);
glVertex2i(120, -240);
glVertex2i(120, -251);
glEnd();
glBegin(GL_POLYGON);
glColor3f(0.5, 0.5, 0.0);
glVertex2i(123, -218);
glVertex2i(123, -213);
glColor3f(0.1, 0.1, 0.1);
glVertex2i(175, -195);
glVertex2i(175, -240);
glEnd();
glBegin(GL_POLYGON);
glColor3f(0.5, 0.5, 0.0);
glVertex2i(123, -248);
glVertex2i(123, -243);
glColor3f(0.1, 0.1, 0.1);
glVertex2i(175, -225);
glVertex2i(175, -265);
glEnd();
}
void display(){
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
latar();
glTranslatef(r,0,0);
kereta();
glPopMatrix();
stopan();
glFlush();
}
32
glutCreateWindow("KERETA MALAM");
gluOrtho2D(0,800,-500,0);
glutDisplayFunc(display);
timer(0);
glutMainLoop();
}
33