Вы находитесь на странице: 1из 34

LAPORAN TUGAS UJIAN TENGAH SEMESTER

ANIMASI 2D GRAFIKA KOMPUTER

“KERETA MALAM”

MATA KULIAH : GRAFIKA KOMPUTER

DOSEN : Erwin Budi Setiawan

Oleh :
Dany Dwi Prayoga/1107114098

PROGRAM STUDI S1

PRODI ILMU KOMPUTASI

TELKOM UNIVERSITY

2014
BAB I
PENDAHULUAN

1.1 Latar Belakang Masalah


Perkembangan grafika komputer menuntut para pengembang sistem aplikasi
grafika komputer untuk dapat mengembangkan suatu informasi yang dilengkapi
dengan visualisasi dan animasi, agar dapat lebih mudah dipahami oleh pihak yang
menggunakan sistem tersebut. Grafika komputer telah menunjukkan kemajuan
yang pesat dalam pengembangan berbagai aplikasi untuk menghasilkan gambar.
Grafika komputer digunakan untuk menunjang berbagai bidang dengan teknologi
grafika berbasis komputer. Penggunaan grafika komputer telah lama digunakan
dalam beberapa macam aplikasi, diantaranya pendidikan, kedokteran, fisika,
matematika, multimedia, dan lain-lain. Pada saat ini grafika komputer sudah
digunakan pada bidang sains, engineering, kedokteran, bisnis, industri,
pemerintahan, seni, hiburan, iklan, pendidikan, dan lain-lain. Oleh karena itu,
sudah semakin banyak pula bahasa pemrograman yang dilengkapi dengan
tools/library pembuatan grafik Salah satu tools/library pembuatan aplikasi grafik
adalah OpenGL (Open Graphics Library). OpenGL(Open Graphics Library)
adalah suatu spefikasi grafik yang low-level yang menyediakan fungsi untuk
pembuatan grafik primitif termasuk titik, garis, dan lingkaran. OpenGL digunakan
untuk mendefinisikan suatu objek, baik objek 2 dimensi maupun objek 3 dimensi.
Dewasa ini pengolahan grafis cenderung memakai teknologi digital. Dalam
teknologi ini image analog yang ditangkap kamera digital dibagi-bagi menjadi
unsur-unsur gambar paling kecil lalu diubah menjadi bit dan disimpan dalam
perangkat digital. Selama ini telah banyak animasi-animasi baik 2D maupun 3D
yang telah dibuat menggunakan teknologi digital. Animasi yang penulis buat ini
tentunya ada sebuah kereta api yang akan terus berjalan ke kiri keluar dari jendela
aplikasi sebelum kemudian kembali ke kanan begitu terus sebaliknya. Pada
animasi ini terdapat objek-objek 2D lainnya yang menjadi latar dari animasi
kereta api tersebut, antara lain stasiun, pemandangan langit malam yang terdiri
dari bulan bintang, dan lampu lalu lintas yang berada berseberangan dengan
stasiun.

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

2.1. Pengertian Grafika Komputer


Grafika komputer (Inggris: Computer graphics) adalah bagian dari ilmu
komputer yang berkaitan dengan pembuatan dan manipulasi gambar (visual)
secara digital. Bentuk sederhana dari grafika komputer adalah grafika komputer
2D yang kemudian berkembang menjadi grafika komputer 3D, pemrosesan citra
(image processing), dan pengenalan pola (pattern recognition). Grafika komputer
sering dikenal juga dengan istilah visualisasi data.
Bagian dari grafika komputer meliputi :
 Geometri: mempelajari cara menggambarkan permukaan bidang
 Animasi: mempelajari cara menggambarkan dan memanipulasi geraka
 Rendering: mempelajari algoritma untuk menampilkan efek cahaya
 Citra (Imaging): mempelajari cara pengambilan dan penyuntingan gambar.
Dasar Matematika yang Diperlukandalam Grafik Komputer
 Geometry (2D, 3D) : Trigonometry, Vector spaces
 Points, vectors, dan koordinat : Dot dan cross products
2.2. Primitive Object
Primitives merupakan geometri sederhana (basic) : titik (points), garis (lines),
segiempat (quads), dan segitiga (triangles).
Primitif objek terdiri atas :
 Titik, yaitu Vertex, dimana vertex merupakan acuan dasar.
 Garis, yaitu Line/Edge
 Bangun 2D (Face)
Fungsi Dasar Menggambar Titik
 glVertex2i(x,y), yaitu suatu fungsi untuk menggambar titik pada koordinat x
dan y, dengan nilai satuan berupa integer. Contoh glVertex2i(10,10);
 glVertex2f(x,y), yaitu suatu fungsi untuk menggambar titik pada koordinat x
dan y, dengan nilai satuan berupa float. Contoh glVertex2f(10.0,10.0);
 glVertex2d(x,y),yaitu suatu fungsi untuk menggambar titik pada koordinat x
dan y, dengan nilai satuan berupa double. Contoh glVertex2d(10.0,10.0);

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,

Urutan penulisan transformasi dalam program (terbalik dari urutan vertex


transformation pipeline) :

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 :

• RGBA (Red, Green, Blue, Alpha)

Alpha digunakan untuk mengatur tingkat opacity objek.

– a = 1  Perfectly opaque (objek terlihat jelas),

– a = 0  Perfectly transparent (objek hilang),

– 0 < a < 1  Different levels of translucency (objek terlihat transparan)

• Blending colors

– Source color : (Rs, Gs, Bs, As)

– Destination color : (Rd, Gd, Bd, Ad)

– Source factor : (Sr, Sg, Sb, Sa)

– Destination factor : (Dr, Dg, Db, Da)

Blended RGBA = (RsSr+RdDr, GsSg+GdDg, BsSb+BdDb, AsSa+AdDa)

2.5. Camera dan Viewing


Camera and viewing adalah Cara mengatur pandangan objek 2D maupun 3D
dan mengontrol pergerakan kamera.
Parallel Projection Syntax
 gluOrtho2D(-100,100,-200,200);
Mendefinisikan besarnya sistem koordinat 2D : dengan range sumbu x adalah
[-100,100] dan range untuk sumbu y adalah [-200,200]
 glOrtho(-15.0, 20.0, -10.0, 15.0, -50.0, 70.0);
Mendefinisikan besarnya sistem koordinat 3D : dengan range sumbu x adalah
[-15,20], range untuk sumbu y adalah [-10,15], range untuk sumbu z adalah [-
50,70]

8
BAB III
PEMBAHASAN

3.1. Komponen Pembangun Objek


Komponen pada pembangunan animasi Kereta Malam ini kebanyakan
menggunakan GL_QUADS dan GL_POLYGON untuk menggambar badan kereta
dan stasiun. Namun fungsi-fungsi OpenGL lainnya seperti GL_LINES dan
GL_TRIANGLES juga tak kalah penting sehingga fungsi-fungsi tersebut juga
sering digunakan.
3.2. Fungsi Dasar Pembentuk Objek
Void Keterangan
int i; Void untuk membuat lingkaran yang
const double PI = 3.14; nantinya akan di panggil pada
void lingkaran(int jari2, int
jumlah_titik, int x_tengah, int
sebuah titik dengan masukan jari-jari
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(){ Void untuk membuat bintang yang
glBegin(GL_POLYGON);
glVertex2f(7.7,7); nantinya akan di panggil pada
glVertex2f(8,14.6);
glVertex2f(9.9,9); koordinat tertentu
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; Void untuk mengatur pergerakan
int ujung=1; kereta ke kiri dan ke kanan
void timer(int value){
if (ujung==1 && r>-1200){

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();
}

3.3. Tampilan Objek

Gambar 1. Tampilan awal animasi

10
Gambar 2. Tampilan saat kereta sudah pergi

Gambar 3. Tampilan saat kereta datang

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();
}

int main(int argc, char** argv){


glutInit(&argc, argv);
glutInitWindowPosition(150,150);
glutInitWindowSize(800,500);

32
glutCreateWindow("KERETA MALAM");
gluOrtho2D(0,800,-500,0);
glutDisplayFunc(display);
timer(0);
glutMainLoop();
}

33

Вам также может понравиться