Upload
trinhxuyen
View
335
Download
16
Embed Size (px)
Citation preview
TUGAS BESAR GRAFIKA KOMPUTERBANGUN RUANG JAM GADANG 3D
Diajukan untuk memenuhiTugas Mata Kuliah Grafika Komputer
Program Strata Satu Jurusan Teknik InformatikaFakultas Teknik dan Ilmu Komputer
Universitas Komputer Indonesia
Dosen : Hendri Karisma, S. Kom
OLEH :
IMAM ZAINUDIN 10108380DIMAS RICKY FIRMANSYAH 10108401SANI SURYA 10108416HAMDI JAMIN 10109701KURNIAWAN 10106268
Kelas : IF8/VIII
JURUSAN TEKNIK INFORMATIKAFAKULTAS TEKNIK DAN ILMU KOMPUTER
UNIVERSITAS KOMPUTER INDONESIABANDUNG
2012KATA PENGANTAR
1
Assalaamu’alaikum wr. wb,
Puji dan syukur penulis panjatkan kepada Allah SWT atas rahmat dan
karunia-Nya yang telah dilimpahkan, shalawat dan salam tidak lupa dicurahkan
kepada Nabi Muhammad SAW, sehingga penulis dapat menyelesaikan penyusunan
Tugas Besar ini tepat pada waktunya dengan judul “BANGUN RUANG JAM
GADANG 3D”.
Penyusunan Tugas Besar ini diajukan untuk memenuhi mata kuliah Grafika
Komputer Program Strata Satu Jurusan Teknik Informatika Fakultas Teknik dan Ilmu
Komputer, Universitas Komputer Indonesia Bandung.
Sebagai manusia biasa penulis menyadari masih terdapat banyak kekurangan
di dalam penulisan laporan Tugas Besar ini karena keterbatasan pengetahuan penulis.
Oleh karena itu, saran dan kritik sangat penulis harapkan. Semoga laporan ini dapat
bermanfaat bagi semua pihak yang memerlukan.
Wassalaamu’alaikum wr. wb.
Bandung, Juli 2012
Penulis
BAB I
PENDAHULUAN
1.1. Latar Belakang
Jam Gadang adalah nama untuk menara jam mirip Big Ben yang terletak di
pusat kota Bukittinggi, Sumatera Barat, Indonesia. Menara jam ini memiliki jam
dengan ukuran besar di empat sisinya sehingga dinamakan Jam Gadang, dimana bila
diterjemahkan dari bahasa Minang ke dalam bahasa Indonesia maka berarti "jam
besar".
Jam Gadang memiliki denah dasar seluas 13 x 4 meter dan tinggi 26 meter ini
terdiri dari beberapa tingkat. Di bagian atas menaraterdapat 4 (empat) jam dengan
diameter masing-masing 80 cm.
Dalam pemanfaatan komputer grafik untuk manipulasi objek 2D/3D, ada dua
jenis obyek yang bisa dimodelkan yaitu obyek sederhana dan obyek kompleks.obyek
sederhana biasanya memiliki bentuk yang kurang bervariasi. Biasanya untuk
mendapatkan obyek yang lebih bervariasi adalah dengan menggabungkan obyek
sederhana dan obyek kompleks.
Dalam kegiatan komputer grafik yang termasuk kedalam mata kuliah, kami
membuat bangun ruang Jam Gadang yang terdiri dari obyek sederhana di bagian luar
obyek dan memiliki obyek kompleks dalam setiap bangunan nya. Seperti bentuk
gonjong atau atap pada rumah adat Minangkabau, Rumah Gadang. Bentuk jam ini-lah
yang menjadi ciri utama dari bangun ruang 3D, jam gadang ini nantinyadapat
berputar layaknya jam – jam pada umumnya. Dan sedikit sentuhan taman kecil yang
mengelilingi ornamen 3D jam gadang.
Ekspetasi yang kami berikan adalah pegambaran langsung dari lokasi Jam
Gadang yang nantinya dituangkan dalam bentuk 3D. Dimana di sekitar jam gadang
akan terdapat jalan – jalan dengan angkutan kota yang berlalu lalang, Jam Gadang
sendiri yang dapat berputar layaknya jam pada umumnya dan efek cahaya lampu
pada taman kecil yang berada di sekitar Jam Gadang yang menyinari ke arah Jam
Gadang yang menjadi fokus utama tugas dalam objek 3D kami.
Kami juga akan menerapkan key keyboard untuk mengatur cahaya,
perputaran jam, laju jalannya angkutan – angkutan kota serta efek kamera yang bisa
di atur arah melihatnya dan juga adanya efek siang serta malam yang dapat
menjadikan suasana Jam Gadang 3D ini berasa seperti aslinya sehingga kita dapat
merasa berada langsung di kota Bukittinggi, Sumatra Barat.
1.2. Perumusan Masalah
Dalam melaksanakan perancangan bangun ruang 3D ini, permasalah yang ada
adalah sebagai berikut :
1. Bagaimana membuat bangun ruang 3D Jam Gadang.
2. Bagaimana menggerakkan detik, menit, dan jam pada setiap jam secara
bersamaan.
3. Bagaimana mengimplementasikan bahan ajar mata kuliah Komputer
Grafika dalam membuat bangun ruang dengan menggunakan OpenGL.
1.3. Maksud dan Tujuan
1.3.1. Maksud
Maksud dari penulisan ini adalah untuk Membuat aplikasi suasana Bangun
Ruang Jam Gadang dengan menggunakan OpenGL yang menampilkan objek-objek
seperti Jam Gadang, Taman, Jalan Lalu Lintas, Sungai, Kincir angin dan Bus.
1.3.2. Tujuan
Adapun tujuan yang akan dicapai dari penulisan tugas besar ini adalah
sebagai berikut :
1. Menampilkan bangunan Jam Gadang beserta taman yang berada disekitarannya
yang dikelilingi oleh pohon-pohon disertai juga adanya kincir angin dan simulasi
pergerakan bus saat melintasi bangunan jam gadang.
2. Mengetahui fungsi-fungsi pada openGL dengan menggunakan empat unsur yaitu
coloring, lighting, blending, dan mapping.
2.1. Batasan Masalah
Agar pembahasan masalah tidak menyimpang dari pokok bahasan, maka
batasan masalah dalam pembuatan perangkat lunak ini adalah sebagai berikut :
1. Hanya menampilkan Bangunan Jam Gadang 3D, taman, bus, pohon-pohon,
kincir angin dan jalan lalu lintas
2. Menampilkan pergerakan bus saat melintas.
3. Menampilkan pergerakan kincir angin.
4. Objek ditampilkan dalam 3 Dimensi
5. Menggunakan tools Code::Blocks 10.05.
BAB II
LANDASAN TEORI DAN IMPLEMENTASI PROGRAM
2.1 Pengertian Grafika Komputer
Grafika komputer (Computer graphics) adalah bagian dari ilmu komputer yang berkaitan
dengan pembuatan dan manipulasi gambar 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:
1. Geometri : mempelajari cara menggambarkan permukaan bidang
2. Animasi : mempelajari cara menggambarkan dan memanipulasi gerakan
3. Rendering : mempelajari algoritma untuk menampilkan efek cahaya
4. Citra (Imaging): mempelajari cara pengambilan dan penyuntingan gambar.
Gambar 1Teapot hasil rendering
Teknik-teknik yang dipelajari dalam grafika komputer adalah teknik-teknik bagaimana
membuat atau menciptakan gambar menggunakan komputer.Ada perbedaan yang sangat
mendasar antara foto dan gambar, yaitu pada foto semua detail obyek terlihat sedangkan pada
gambar (baik itu gambar manusia atau gambar komputer) tidak dapat memperlihatkan semua
detail yang ada tetapi hanya detail-detail yang dianggap penting dalam menunjukkan pola suatu
gambar.
6
2.2 Elemen Dasar Grafika
Ada beberapa elemen dasar dari grafika komputer antara lain:
a) Point
Point adalah sebuah titik yang digunakan untuk membangun obyek. Setiap titik dalam
obyek 3 dimensi memiliki nilai dalam x, y dan z.
b) Polyline
Polyline adalah sebuah fungsi yang dibentuk dari beberapa garis yang saling
berhubungan dan membentuk sebuh kurva yang terbuka.
c) Polygon
Polygon adalah suatu fungsi yang mirip dengan polyline hanya saja hasilnya adalah
kurva tertutup, sedangkan polyline hasilnya kurva terbuka.
d) Filled Polygon ( Face )
Filled Polygon adalah sebuah polygon yang bagian dalamnya diwarnai atau dipenuhi
dengan sebuah warna tertentu.Filled polygon biasanya digunakan sebagai face dari
pembentukan obyek–obyek 3 Dimensi.
e) Gradate Polygon
Gradate polygon adalah sebuah polygon yang bagian dalamnya memiliki warna – warna
yang bergradasi dari satu warna ke warna yang lainnya.
2.3 Grafik Komputer 2D
Grafik komputer 2D adalah pembuatan objek gambar dengan menggunakan 2 titik sebagai
acuannya yaitu sumbu x dan y. Grafik 2D ini dapat digunakan dalam berbagai aplikasi yang pada
awalnya dikembangkan pada teknologi cetak tradisional dan gambar, seperti tipografi, kartografi,
gambar teknik, iklan, dan lain-lain.
Grafik komputer 2D ini merupakan langkah paling awal dalam membentuk model objek
yang akan dibangun dalam grafik komputer 3D. Dalam aplikasi, gambar dua dimensi adalah
bukan hanya representasi dari objek dunia nyata, tetapi sebuah artefak independen dengan nilai
tambah semantik. Keseluruhan obyek 2D dapat dimasukkan dengan jumlah lebih dari satu,
model yang akan dibentuk sesuai dengan kebutuhan. Tahap rekayasa hasil obyek 2D dapat
dilakukan dengan aplikasi program grafis seperti Adobe Photoshop, Corel Draw, dan lain
sebagainya.
2.4 grafik komputer 3D
Grafik komputer 3D merupakan representasi dari data geometrik 3 dimensi sebagai hasil
dari pemrosesan dan pemberian efek cahaya terhadap grafik komputer 2D.hasilnya dapat
ditampilkan secara real time untuk keperluan simulasi. Prinsip yang dipakai mirip dengan grafik
komputer 2D dalam penggunaan algoritma, grafika vektor, model frame kawat (wire frame
model), dan grafik rasternya.
Grafik komputer 3D sering disebut sebagai model 3D. Namun, model 3D ini lebih
menekankan pada representasi matematis untuk objek 3 dimensi. Obyek pada grafik 3D adalah
sekumpulan titik-titik 3D (x,y,z) yang membentuk suatu face (bidang) yang digabungkan
menjadi satu kesatuan. Face sendiri adalah gabungan titik-titik yang membentuk bidang tertentu.
Data matematis ini belum bisa dikatakan sebagai gambar grafis hingga saat ditampilkan secara
visual pada layar komputer atau printer. Proses penampilan suatu model matematis ke bentuk
citra 2 D biasanya dikenal dengan proses 3D rendering.
2.5 Perbedaan Grafik 2D dan 3D
Perbedaan yang paling mendasar dan terlihat dengan sangat jelas adalah tampilan
gambarnya. Gambar 2D tampil flat adn frame tampilannya cenderung terbatas karena objek
gambarnya disajikan hanya dengan sumbu x dan y. Sedangkan pada grafik 3D, gambar yang
ditampilkan lebih hidup, membentuk ruang, tidak flat, serta framenya lebih luas yang
dikarenakan gambar 3D disajikan dengan 3 sumbu, yaitu x, y, dan z.
2.6 Transformasi
Transformasi dasar pada objek dua dimensi yang pertama adalah translasi (translation).
Translasi berarti memindahkan suatu objek sepanjang garis lurus dari suatu lokasi koordinat
tertentu ke lokasi yang lain. Transformasi skala (scaling) digunakan untuk mengubah ukuran
suatu objek, sedangkan rotasi (rotation) adalah pemindahan objek menurut garis melingkar.
Jenis jenis dari transformasi dasar sebagai berikut :
a) Translasi
Translasi dilakukan dengan penambahan translasi pada suatu titik koordinat dengan
translasi vektor atau shift vektor, yaitu (tx,ty), dimana tx adalah translation vektor menurut
sumbu x, sedangkan ty adalah translation vektor menurut sumbu y. koordinat baru titik yang
ditranslasi dapat diperoleh dengan
X’= x + tx
Y’= y + ty
Dimana (x,y) adalah koordinat asal suatu objek dan (x’ , y’) adalah koordinat baru objek
tersebut setelah ditranslasi.
Kadang-kadang transformasi dinyatakan dalam bentuk matriks, sehingga matriks
tranformasi untuk translasi dapat dinyatakan sebagai berikut :
Dengan demikian translasi dua dimensi dapat ditulis dalam bentuk matriks :
P’ = P + T
Disamping dinyatakan dalam vektor kolom, matriks transformasi dapat dituliskan dalam
bentuk vektor baris, sehingga menjadi P = [ x y ] dan T = [ tx ty ]. Bentuk vektor kolom
adalah standar dari symbol matematik, yang juga berlaku bagi notasi grafik seperti GKS dan
PHIGS.
b) Skala
Transformasi skala adalah perubahan ukuran suatu objek. Koordinat baru dapat diperoleh
dengan melakukan perkalian nilai koordinat dengan scaling factor, yaitu (sx , sy) ,dimana sx
adalah scaling factor menurut sumbu x, sedangkan sy adalah scaling factor menurut sumbu
y. koordinat baru titik yang diskala dapat diperoleh dengan
X’= x + sx
Y’ = y + sy
Dimana (x , y) adalah koordinat asal suatu objek dan (x’,y’) adalah koordinat setelah
diskala. Matriks transformasi untuk skala dapat dinyatakan sebagai berikut:
Dengan demikian skala dapat juga dituliskan
P’ = S . P
Scaling factor sx dan sy dapat diberikan sembarang nilai positif. Nilai lebih dari 1
menyebabkan objek diperbesar, sebaliknya bila nilai lebih kecil dari 1, maka objek akan
diperkecil. Bila sx dan sy mempunyai nilai yang sama, maka skala disebut uniform scaling.
Nilai yang tidak sama dari sx dan sy menghasilkan differential scaling, yang biasa digunakan
pada program aplikasi.
c) Rotasi
Rotasi dua dimensi pada suatu objek kan memindahkan objek tersebut menurut garis
melingkar. Pada bidang xy. Untuk melakukan rotasi diperlukan sudut rotasi θ dan pivot
point (xp’ yp ) atau rotasi point dimana objek di rotasi, seperti pada gambar 5-3 nilai positif
dari sudut rotasi menentukan arah rotasi berlawanan dengan jarum jam, dan sebaliknya nilai
negative akan memutar objek searah jarum jam.
Rotasi dapat dilakukan dengan pivot point yaitu titik pusat koordinat, seperti pada gambar 5-
4. Pada betuk ini, r adalah jarak konstan dari titik pusat, sudut φ adalah sudut posisi suatu
titik dengan sumbu horizontal, sedangkan θ adalah sudut rotasi. Menggunakan trigonometri,
transformasi dapat dinyatakan dengan sudut θ dan φ sebagai berikut:
X’= r cos (φ + θ) = r cos φ cos θ – r sin φ sin θ
y’ = r sin (φ + θ) = r cos φ sin θ + r sin φ cos θ
sedangkan dengan koordinat polar diketahui bahwa
x = r cos φ, y = r sin φ
dengan melakukan substitusi, diperoleh rumus transformasi untuk rotasi suatu titik (x, y)
dengan sudut rotasi θ sebagai berikut:
x’ = x cos θ – y sin θ
y’ = x sin θ – y cos θ
matriks transformasi untuk rotasi dapat dinyatakan sebagai berikut:
P’ = R . P
Rotasi dapat dinyatakan dalam bentuk lain, yaitu matriks. Matriks rotasi dapat dituliskan
dengan
Rotasi suatu titik terhadap pivot point (xp’ yp ) seperti pada gambar 5-5, menggunakan
bentuk trigonometri, secara umum dapat dituliskan sebagai berikut:
X’ = xp +(x - xp) cos θ – (y - yp) sin θ
Y’ = yp + (x – xp) sin θ + (y – yp) cos θ
2.7 Color (Warna)
Bentuk gelombang elektromagnetik yang terkandung dalam cahaya yang berasal dari
sumber cahaya. Spectrum warna memiliki panjang gelombang elektomagnetik antara 350-750
nanometer .
Pembagian Warna
RGB (Red-Green-Blue) : warna dasar yang dijadikan patokan warna secara universal
(primary colors)
CMYK (Cyan-Magenta-Yellow-Black) : Sistem representasi pada warna tinta yang
diterapkan dalam dunia fotografi dan produksi grafika
Sistem Warna Lingkaran (the color wheel) : Digunakan untuk mengkombinasikan dan
mengharmonikan warna pada karya seni dan design
Gambar 2 Pembagian warna
Warna dapat didefinisikan secara obyektif/fisik sebagai sifat cahaya yang dipancarkan,
atau secara subyektif/psikologis sebagai bagian dari pengalaman indera pengelihatan. Secara
obyektif atau fisik, warna dapat diberikan oleh panajang gelombang. Dilihat dari panjang
gelombang, cahaya yang tampak oleh mata merupakan salah satu bentuk pancaran energi yang
merupakan bagian yang sempit dari gelombang elektromagnetik.
Dari sekian banyak warna, dapat dibagi dalam beberapa bagian yang sering dinamakan
dengan sistem warna Prang System yang ditemukan oleh Louis Prang pada 1876 meliputi :
1. Hue, adalah istilah yang digunakan untuk menunjukkan nama dari suatu warna, seperti
merah, biru, hijau dsb.
2. Value, adalah dimensi kedua atau mengenai terang gelapnya warna. Contohnya adalah
tingkatan warna dari putih hingga hitam.
3. Intensity, seringkali disebut dengan chroma, adalah dimensi yang berhubungan dengan
cerah atau suramnya warna.
2.8 Lighting (pencahayaan)
Lighting merupakan proses menghitung intensitas cahaya terutama pada 3-Dimensi point,
biasanya diatas suatu permukaan.
Beberapa cara mengatasi masalah pencahayaan, antara lain :
• Mengerti persepsi dari cahaya (warna)
• Membuat sebuah solusi untuk merepresentasikan dan menghasilkan warna menggunakan
komputer.
• Mengerti akan pengaruh cahaya dan objek
` Bayangan
Bayangan akan muncul saat cahaya jatuh menyinari suatu objek.
Pada dunia maya, layaknya cahaya, terdapat beberapa jenis bayangan yang dapat
dihasilkan oleh komputer.
Bayangan bekerja sama dengan cahaya untuk memberi kesan natural atau realistic pada
scene yang ada. Bayangan dapat membantu mendefinisikan posisi objek-objek, apakah
berada di lantai atau melayang di udara.Bayangan yang dihasilkan bisa tajam dan solid
namun bisa juga lembut dan buram (blurry).Keberadaan bayangan atau ketiadaannya
dapat digunakan untuk memberi keseimbangan dan kontras pada objek-objek di dalam
scene.
2.9 Blending (Pencampuran)
Pencampuran merupakan fungsi yang menggabungkan nilai warna dari sumber dan
tujuan. Operasi campuran yaitu cara yang paling alami untuk mengetahui bahwa komponen RGB
adalah suatu fragmen yang mewakili warna dan komponen alfa adalah suatu fragmen yang
mewakili sifat tidak tembus cahaya.
Faktor sumber dan tujuan
Pada proses pencampuran, nilai cairan warna yang masuk fragmen (sumber) digabungkan
dengan warna yang sesuai dengan nilai saat ini yang disimpan pada piksel (tujuan) dalam dua
tahap proses. Yang pertama menghitung faktor sumber dan tujuan, factor-faktor tersebut adalah
RGBA quadruplets yang masing-masing dikalian dengan komponen-komponen R, G, B dan
nilai-nilai dari sumber dan tujuan. Kemudian komponen yang sesuai dalam dua set RGBA
quadruplets. Secara sistematis, faktor sumber dan tujuan pencampuran (SR, Sg, Sb, Sa) dan (Dr,
Dg, dB, Da) dan nilai RGBA ditandai dengan s atau d dan terakhir nilai RGBA dicampurkan
yang diperoleh dengan (RsSr + RdDr, GsSg + GdDg, BsSb + BdDb, AsSa + Adda) dimana
setiap komponen adalah quadruplets is eventually clamped to [0,1].
Dengan menggunakan glBlendFunc () untuk persediaan pada dua hal utama, yang
pertama menentukan bagaimana faktor sumber dan tujuan harus dihitung dan yang kedua
menunjukan bagaimana faktor sumber dan tujuan dihitung. Dan untuk proses pencampurannya
harus ada faktor pengaktifannya menggunakan : glEnable (GL_BLEND). Menggunakan
glDisable () dengan GL_BLEND untuk menonaktifkan Pencampuran dan menggunakan konstan
GL_ONE (sumber) dan GL_ZERO (tujuan) memberikan hasil yang sama seperti ketika
Pencampuran dinonaktifkan. Nilai-nilai ini bersifat default dengan void glBlendFunc (GLenum
sfactor, GLenum dfactor).
Mengontrol bagaimana nilai warna dalam fragmen yang diproses digabungkan dengan
yang sudah disimpan dalam framebuffer (tujuan).Pendapat sfactor menunjukkan bagaimana
untuk menghitung faktor sumber Pencampuran dan dfactor menunjukkan bagaimana untuk
menghitung faktor tujuan Pencampuran. Campuran faktor yang diasumsikan terletak pada
rentang [0,1]; setelah nilai warna dalam sumber dan tujuan digabungkan, setelah dihitung kisaran
[0,1].
2.10 Texture Mapping
Texture mapping merupakan teknik pemetaan sebuah tekstur pada pola gambar
wireframe, dimana wireframe yang telah dibuat akan ditampilkan memiliki kulit luar seperti
tekstur yang diinginkan. Dalam pemberian tekstur, perlu diperhatikan dasarnya seperti:
1. Menentukan tekstur
a) Membaca atau membangkitkan tekstur.
b) Menandai tekstur.
c) Mengenablekan tekstur.
2. Menandai koordinat tekstur pada vertek.
3. Menentukan parameter tekstur seperti : Wrapping , filtering, dsb.
Langkah-langkah dalam memulai mapping sebuah tekstur yakni dengan spesifikasi
dibawah ini :
a) Menentukan Tekstur Image :
1. Mendefinisikan tekstur image dari sebuah array teksel (element tekstur ) ke dalam
memory cpu : Glubyte my_texels[512][512];
2. Mendefinisikan seperti semua peta piksel yang lain :
a) Gambar yang didefinisikan (baik secara manual maupun dengn suatu fungsi
matematik tertentu).
b) Membangkitkan dengan kode aplikasi.
3. Mengenablekan tekstur mapping
a) glEnable(GL_TEXTURE_2D)
b) OpenGL mendukung 1 sampai 4 dimensional tekstur mapping
b) Mendefinisikan gambar sebagai sebuah tekstur
glTexImage2D(target,level,components,w,h,border,format,type, texels );
Keterangan :
1. target: tipe dari teksture, e.g. GL_TEXTURE_2D
2. level: digunakan untuk mipmapping
3. components: element per texel
4. w, h: lebar dan tinggi dari texels pada pixels
5. border: digunakan untuk smoothing
6. format and type: menjelaskan texels
7. texels: pointer ke array texel
8. glTexImage2D(GL_TEXTURE_2D, 0, 3, 512, 512, 0,GL_RGB,
GL_UNSIGNED_BYTE, my_texels).
c) Mengubah gambar tekstur :
1. OpenGL meminta dimensi tekstur untuk menjadi dasar dari 2
2. Jika dimensi dari image bukan power ke 2, gluScaleImage
(format,w_in,h_in,type_in,*data_in,w_out,h_out,type_out,*data_out);
3. data_in adalah gambar inputan.
4. data_out adalah gambar hasil.
d) Mapping Tekstur :
1. Didasarkan pada koordinat tekstur parametric.
2. glTexCoord*() ditetapkan pada masing – masing vertex.
2.11 Fog
Fog adalah suatu istilah umum yang menggambarkan bentuk yang sama dari pengaruh
atmosfer, yang digunakan untuk menirukan kabut, kabut tipis, asap, atau polusi. fog sangat
penting di dalam aplikasi-aplikasi simulasi yang visual, yang dibatasi oleh jarak penglihatan
untuk itu perlu lebih mendekati objek. Juga sering disatukan ke dalam tampilan simulator
penerbangan.
Ketika fog memungkinkan, sudut pandang objek bersifat lebih jauh untuk memudarkan
warna fog. Anda dapat mengendalikan kepadatan fog, yang mana menentukan tingkat objek
memudar dengan jarak meningkat, seperti juga warna fog. Fog terdapat di dalam kedua gaya
yaitu gaya RGBA dan indeks warna, meski perhitungannya sedikit berbeda di kedua gaya
2.12 Pengertian OpenGl
OpenGL adalah API (Application Programing Interface) yang dikenalkan oleh SGI
(Silicon Graphics Inc) kali pertama pada tahun 1980-an. Awalnya OpenGL diciptakan untuk
mendukung proses rendering, pada saat itu hanya digunakan untuk mendukung proses redering
yang dilakukan oleh komputer graphic produksi SGI. Namun akhirnya, OpenGL dijadikan
standar oleh berbagai perusahaan software dan hardware.
open GL (program java for openGL). adalah bahasa yang dapat dijalankan dimanapun
dan di sembarang platform apapun, diberagam lingkungan : internet, intranets, consumer
electronic products, dan computer applications. Bahasa pemrograman berorientasi objek telah
menjadi aliran utama (mainstream), java benar-benar berorientasi objek sejati, melebihi C+
+.Segala sesuatu dijava kecuali sedikit type dasar (int, float, double, char) adalah objek.
2.13 Visual C++
Visual C++ adalah sebuah produk Integrated Development Environment (IDE) untuk
bahasa pemrograman C dan C++ yang dikembangkan Microsoft. Visual C++ merupakan salah
satu bagian dari paket Microsoft Visual Studio .Bahasa C atau C++ adalah suatu bahasa
pemrograman.Bahasa C termasuk sebagai bahasa pemrograman tingkat menengah, maksudnya
bahasa C bisa dipelajari dengan lebih mudah karena mudah dimengerti tetapi mempunyai
kemampuan yang tinggi.
Bahasa C bisa digunakan untuk merekayasa program untuk segala kebutuhan, baik untuk
aplikasi bisnis, matematis atau bahkan game.Semua bahasa mempunyai kelemahan atau
kelebihan sendiri-sendiri. Begitu juga dengan bahasa C. Adapun sebagian kelebihan dari bahasa
C adalah sebagai
berikut :
Banyak memiliki operator untuk mengolah / memanipulasi data.
Bahasa C termasuk sebagai bahasa yang terstruktur sehingga program dapat
lebih mudah dipahami atau dikembangkan.
Bahasa C lebih mudah dimengerti karena lebih mirip kepada bahasa manusia.
Kecepatan eksekusi tinggi.
Mengenal data pointer.
Sedangkan kelemahan dari bahasa C adalah :
Banyaknya operator atau cara penulisan program kadang menimbulkan
kebingungan para pemakainya.
Perlunya ketelitian dalam penulisan program karena perintah (statement)
dalam bahasa C bersifat case sensitiv (huruf kapital dan huruf kecil dibedakan
2.14 Implementasi
Pembuatan objek yang kami lakukan dilakukan dengan pemanggilan fungsi-fungsi umum
yang sudah tersedia di library OpenGL itu sendiri. Berikut objek-objek yang kami panggil :
2.14.1 Rincian Program
1. Terrain yang dibuat terdiri dari terrain tanah, terrain air dan terrain jalan raya.
2. Bangun jam gadang dibuat dengan menggabungkan kubus-kubus baik yang solid maupun
yang berbentuk wire sebagai jendela dan relif-relief. Jam dibuat menggunakan gabungan
lingkaran dan jarum jam dengan kubus. Bagian atas dari jam gadang dibuat menggunakan
vertex.
3. Kincir dibangun menggunakan gabungan kubus dan bangun torrus yang terdapat pada
openGl. Sedangkan untuk memutar kincir menggunakan fungsi TimeFunc yang
dirotasikan.
4. Bus dibangun menggunakan gabungan kubus dan lingkaran (sphere). Bus bisa melakukan
aksi maju mundur dengan menekan keyboard “n” dan untuk mundur menggunakan
keyboard “m”.
5. Taman dibuat dengan menggabungkan kubus yang dibentuk sedemikian rupa agar bisa
menjadi lampu hiasan, bangku dan dasar taman.
6. Pohon-pohonan menggabungkan kubus dengan kerucut (cone) yang di transformasikan
dan di rotasi sedemikian rupa sehingga terlihat seperti pohon cemara.
7. Pagar dibangun dengan menggunakan gabungan kubus-kubus (cube), begitu pula dengan
lampu hanya ditambah dengan lingkaran (sphere) sebgai lampunya.
8. Pencahayaan menggunakan tiga sumber cahaya sehingga tingkat kecerahan pada saat
menyentuh benda diatur maksimal agar kelihatan perbedaannya.
2.14.2 Capture Program
Capture Program ini terdapat beberapa tampilan yang ada dalam bangun ruang Jam Gadang 3D.
1. Tampilan Awal Program Bangun Ruang Jam Gadang
Gambar
2. Tampilan Gedung Jam Gadang (Sumatera Barat)
Gambar
3. Tampilan Taman
Gambar
4. Tampilan Jalan Lalu Lintas beserta bus
Gambar
5. Tampilan Kincir angin
Gambar
BAB III
KESIMPULAN DAN SARAN5.1 Kesimpulan
Kesimpulan merupakan proses terakhir yang berisi hasil dari penelitian yang telah
dilakukan. Berikut adalah kesimpulan yang dapat di ambil dari tugas ini :
1. Mengetahui fungsi-fungsi pencampuran lighting, color, blending, fog.
2. Dapat melihat secara langsung perubahan yang terjadi pada objek.
5.2 Saran
Kami sangat mengharapkan saran dan kritik dari pembaca yang sifatnya membangun
bagi kami untuk memperbaiki segala kekurangan, maka kami dapat menghasilkan makalah yang
lebih baik lagi.
DAFTAR PUSTAKA
1. http://dhanstar.blogspot.com/2010/10/grafik-komputer-2d-dan-3d.html.
2. http://aflah7.wordpress.com/2010/10/14/konsep-pemodelan-grafik-2d-dan-3d/
3. http://www.ilhamsk.com/desain-pemodelan-grafik/
4. http://id.wikipedia.org/wiki/Grafika_komputer_3D
5. http://id.wikipedia.org/wiki/Grafika_komputer.
LAMPIRAN
SOURCE KODE
//Tugas Besar Grafika Komputer "Pembuatan Jam Gadang"//Imam Zainudin 10108380//Dimas Ricky 10108401//Sani Surya S 10108416//Hamdi Jamin 10109701//Kurniawan 10106268
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#ifdef __APPLE__#include <OpenGL/OpenGL.h>#include <GLUT/glut.h>#else#include <GL/glut.h>#include <GL/glu.h>#include <GL/gl.h>#include "imageloader.h"#include "vec3f.h"#endif
//static GLfloat spin, spin2 = 0.0;float angle = 0;float sudutk = 30.0f;using namespace std;
float lastx, lasty;GLint stencilBits;static int viewx = 50;static int viewy = 24;static int viewz = 80;int a=0, b=0, c=0, d=0;float rot = 0;
//train 2D//class untuk terain 2Dclass Terrain {private:
int w; //Widthint l; //Lengthfloat** hs; //HeightsVec3f** normals;bool computedNormals; //Whether normals is up-to-
datepublic:
Terrain(int w2, int l2) {w = w2;l = l2;
hs = new float*[l];for (int i = 0; i < l; i++) {
hs[i] = new float[w];}
normals = new Vec3f*[l];for (int i = 0; i < l; i++) {
normals[i] = new Vec3f[w];}
computedNormals = false;}
~Terrain() {for (int i = 0; i < l; i++) {
delete[] hs[i];}delete[] hs;
for (int i = 0; i < l; i++) {delete[] normals[i];
}delete[] normals;
}
int width() {return w;
}
int length() {return l;
}
//Sets the height at (x, z) to yvoid setHeight(int x, int z, float y) {
hs[z][x] = y;computedNormals = false;
}
//Returns the height at (x, z)float getHeight(int x, int z) {
return hs[z][x];}
//Computes the normals, if they haven't been computed yet
void computeNormals() {if (computedNormals) {
return;}
//Compute the rough version of the normals
Vec3f** normals2 = new Vec3f*[l];for (int i = 0; i < l; i++) {
normals2[i] = new Vec3f[w];}
for (int z = 0; z < l; z++) {for (int x = 0; x < w; x++) {
Vec3f sum(0.0f, 0.0f, 0.0f);
Vec3f out;if (z > 0) {
out = Vec3f(0.0f, hs[z - 1][x] - hs[z][x], -1.0f);
}Vec3f in;if (z < l - 1) {
in = Vec3f(0.0f, hs[z + 1][x] - hs[z][x], 1.0f);
}Vec3f left;if (x > 0) {
left = Vec3f(-1.0f, hs[z][x - 1] - hs[z][x], 0.0f);
}Vec3f right;if (x < w - 1) {
right = Vec3f(1.0f, hs[z][x + 1] - hs[z][x], 0.0f);
}
if (x > 0 && z > 0) {sum +=
out.cross(left).normalize();}if (x > 0 && z < l - 1) {
sum += left.cross(in).normalize();
}if (x < w - 1 && z < l -
1) {sum +=
in.cross(right).normalize();}if (x < w - 1 && z > 0) {
sum += right.cross(out).normalize();
}
normals2[z][x] = sum;}
}
//Smooth out the normalsconst float FALLOUT_RATIO = 0.5f;for (int z = 0; z < l; z++) {
for (int x = 0; x < w; x++) {Vec3f sum =
normals2[z][x];
if (x > 0) {sum +=
normals2[z][x - 1] * FALLOUT_RATIO;}if (x < w - 1) {
sum += normals2[z][x + 1] * FALLOUT_RATIO;
}if (z > 0) {
sum += normals2[z - 1][x] * FALLOUT_RATIO;
}if (z < l - 1) {
sum += normals2[z + 1][x] * FALLOUT_RATIO;
}
if (sum.magnitude() == 0) {
sum = Vec3f(0.0f, 1.0f, 0.0f);
}normals[z][x] = sum;
}}
for (int i = 0; i < l; i++) {delete[] normals2[i];
}delete[] normals2;
computedNormals = true;}
//Returns the normal at (x, z)Vec3f getNormal(int x, int z) {
if (!computedNormals) {computeNormals();
}return normals[z][x];
}};//end class
void initRendering() {glEnable(GL_DEPTH_TEST);glEnable(GL_COLOR_MATERIAL);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_NORMALIZE);glShadeModel(GL_SMOOTH);
}
//Loads a terrain from a heightmap. The heights of the terrain range from//-height / 2 to height / 2.//load terain di procedure inisialisasiTerrain* loadTerrain(const char* filename, float height) {
Image* image = loadBMP(filename);Terrain* t = new Terrain(image->width, image-
>height);for (int y = 0; y < image->height; y++) {
for (int x = 0; x < image->width; x++) {unsigned char color = (unsigned
char) image->pixels[3 * (y* image-
>width + x)];float h = height * ((color / 255.0f)
- 0.5f);t->setHeight(x, y, h);
}}
delete image;t->computeNormals();return t;
}
float _angle = 60.0f;//buat tipe data terainTerrain* _terrain;Terrain* _terrainTanah;
Terrain* _terrainAir;
const GLfloat light_ambient[] = { 0.3f, 0.3f, 0.3f, 1.0f };const GLfloat light_diffuse[] = { 0.7f, 0.7f, 0.7f, 1.0f };const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat light_position[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_ambient2[] = { 0.3f, 0.3f, 0.3f, 0.0f };const GLfloat light_diffuse2[] = { 0.3f, 0.3f, 0.3f, 0.0f };
const GLfloat mat_ambient[] = { 0.8f, 0.8f, 0.8f, 1.0f };const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };const GLfloat high_shininess[] = { 100.0f };
void cleanup() {delete _terrain;delete _terrainTanah;
}
//untuk di displayvoid drawSceneTanah(Terrain *terrain, GLfloat r, GLfloat g, GLfloat b) {
// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
/* glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0f, 0.0f, -10.0f); glRotatef(30.0f, 1.0f, 0.0f, 0.0f); glRotatef(-_angle, 0.0f, 1.0f, 0.0f);
GLfloat ambientColor[] = {0.4f, 0.4f, 0.4f, 1.0f}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT,
ambientColor);
GLfloat lightColor0[] = {0.6f, 0.6f, 0.6f, 1.0f}; GLfloat lightPos0[] = {-0.5f, 0.8f, 0.1f, 0.0f}; glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor0); glLightfv(GL_LIGHT0, GL_POSITION, lightPos0); */float scale = 150.0f / max(terrain->width() - 1, terrain-
>length() - 1);glScalef(scale, scale, scale);glTranslatef(-(float) (terrain->width() - 1) / 2, 0.0f,
-(float) (terrain->length() - 1) / 2);
glColor3f(r, g, b);for (int z = 0; z < terrain->length() - 1; z++) {
//Makes OpenGL draw a triangle at every three consecutive vertices
glBegin(GL_TRIANGLE_STRIP);for (int x = 0; x < terrain->width(); x++) {
Vec3f normal = terrain->getNormal(x, z);
glNormal3f(normal[0], normal[1], normal[2]);
glVertex3f(x, terrain->getHeight(x, z), z);
normal = terrain->getNormal(x, z + 1);
glNormal3f(normal[0], normal[1], normal[2]);
glVertex3f(x, terrain->getHeight(x, z + 1), z + 1);
}glEnd();
}
}
//MARKA JALANvoid marka(){ glPushMatrix();
glColor3f(1.0f, 1.0f, 1.0f); glScaled(10.5, 0.1 , 2.5); glutSolidCube(0.5f); glPopMatrix();}//LAMPUvoid lampuJalan(){ //Tiang Tegak
glPushMatrix();glColor3f(0.5, 0.5, 0.5);glScalef(0.04,1.7,0.05);glutSolidCube(7.0f);glPopMatrix();
//Tiang AtasglPushMatrix();glColor3f(0.5f, 0.5f, 0.5f);glTranslatef(0.0,5.3,-2.0);
glScaled(0.5, 1.0 , 7.5); glutSolidCube(0.5f);
glPopMatrix();
//LampuglPushMatrix();glTranslatef(0.0, 4.7, -3.7);glColor3f(1, 1, 1);glScalef(0.8,0.8,1.5);glutSolidSphere(0.5,70,20);glPopMatrix();
}
void lampuJalan2(){ //Tiang Tegak
glPushMatrix();glColor3f(0.5, 0.5, 0.5);glScalef(0.04,1.7,0.05);glutSolidCube(7.0f);glPopMatrix();
//Tiang AtasglPushMatrix();glColor3f(0.5f, 0.5f, 0.5f);glTranslatef(0.0,5.3,2.0);
glScaled(0.5, 1.0 , 7.5); glutSolidCube(0.5f);
glPopMatrix();
//LampuglPushMatrix();glTranslatef(0.0, 4.7, 3.7);glColor3f(1, 1, 1);glScalef(0.8,0.8,1.5);glutSolidSphere(0.5,70,20);
glPopMatrix();
}
void lampu(){ //Tiang
glPushMatrix();glColor4f(0.5, 0.5, 0.5, 0.0);glScalef(0.02,0.3,0.04);glutSolidCube(7.0f);glPopMatrix();
//LampuglPushMatrix();glTranslatef(0.0f, 2.0f, 0.0f);glColor3f(1, 1, 1);glScalef(2.0,2.0,3.0);glutSolidSphere(0.5,70,20);glPopMatrix();
}
//PAGARvoid pagar(){ //Pagar Atas glPushMatrix();
glColor4f(0.5f, 0.5f, 0.5f, 1.0f); glTranslatef(-26.0f, 2.0f, 0.0f); glScaled(297.0, 1.0 , 0.5); glutSolidCube(0.5f); glPopMatrix();
//Pagar Bawah glPushMatrix();
glColor4f(0.5f, 0.5f, 0.5f, 1.0f); glTranslatef(-26.0f, 1.05f, 0.0f); glScaled(297.0, 1.0 , 0.5); glutSolidCube(0.5f); glPopMatrix();
//Pagar Tegak glPushMatrix();
glColor4f(0.5f, 0.5f, 0.5f, 1.0f); glTranslatef(1.0f, 0.0f, 0.0f); glScaled(1.5, 10.0 , 0.5); glutSolidCube(0.5f); glPopMatrix();
glPushMatrix();glColor4f(0.5f, 0.5f, 0.5f, 1.0f);
glTranslatef(26.0f, 0.0f, 0.0f); glScaled(1.5, 10.0 , 0.5); glutSolidCube(0.5f); glPopMatrix();
glPushMatrix();glColor4f(0.5f, 0.5f, 0.5f, 1.0f);
glTranslatef(47.8f, 0.0f, 0.0f); glScaled(1.5, 10.0 , 0.5); glutSolidCube(0.5f); glPopMatrix();
glPushMatrix();glColor4f(0.5f, 0.5f, 0.5f, 1.0f);
glTranslatef(-26.0f, 0.0f, 0.0f);
glScaled(1.5, 10.0 , 0.5); glutSolidCube(0.5f); glPopMatrix();
glPushMatrix();glColor4f(0.5f, 0.5f, 0.5f, 1.0f);
glTranslatef(-51.0f, 0.0f, 0.0f); glScaled(1.5, 10.0 , 0.5); glutSolidCube(0.5f); glPopMatrix();
glPushMatrix();glColor4f(0.5f, 0.5f, 0.5f, 1.0f);
glTranslatef(-76.0f, 0.0f, 0.0f); glScaled(1.5, 10.0 , 0.5); glutSolidCube(0.5f); glPopMatrix();
glPushMatrix();glColor4f(0.5f, 0.5f, 0.5f, 1.0f);
glTranslatef(-100.0f, 0.0f, 0.0f); glScaled(1.5, 10.0 , 0.5); glutSolidCube(0.5f); glPopMatrix();}
//LANTAI BANGUNANvoid bangunan(){ //Dasar glPushMatrix();
glColor4f(0.5f, 0.5f, 0.5f, 1.0f);glScalef(4.0,0.02,4.5);glutSolidCube(9.0f);
glPopMatrix();
//Dasar2 glPushMatrix(); glColor3f(0.0, 0.0, 0.0); glTranslatef(0.0, 0.0, 28.5); glScalef(1.5,0.02,1.9);
glutSolidCube(9.0f); glPopMatrix();
//Trotoar kanan glPushMatrix(); glColor3f(0.5, 0.5, 0.5); glTranslatef(7.0, 0.0, 28.5); glScalef(0.05,0.1,1.9);
glutSolidCube(9.0f); glPopMatrix(); //Trotoar Kiri glPushMatrix(); glColor3f(0.5, 0.5, 0.5); glTranslatef(-7.0, 0.0, 28.5); glScalef(0.05,0.1,1.9);
glutSolidCube(9.0f); glPopMatrix();
//Plang //Tiang kanan glPushMatrix();
glColor4f(0.5f, 0.5f, 0.5f, 1.0f); glTranslatef(7.0, 5.0, 36.0); glScaled(1.0, 20.0 , 0.5); glutSolidCube(0.5f);
glPopMatrix(); //Tiang kiri glPushMatrix();
glColor4f(0.5f, 0.5f, 0.5f, 1.0f); glTranslatef(-7.0, 5.0, 36.0); glScaled(1.0, 20.0 , 0.5); glutSolidCube(0.5f); glPopMatrix(); //Plang glPushMatrix();
glColor4f(0.8f, 0.5f, 0.0f, 1.0f); glTranslatef(0.0, 10.0, 36.0); glScaled(30.0, 5.0 , 0.5); glutSolidCube(0.5f); glPopMatrix();
}
//BANGUN JAM GADANGvoid lantai1(){
glPushMatrix();glTranslatef(0.0f, -3.3f, 0.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(1.8,1.4,1.8);glutSolidCube(6.0f);glPopMatrix();
}
void jendelalantai1(){
glPushMatrix();glTranslatef(-1.5f, -3.6f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.8,1.3,3.7);glutSolidCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(1.5f, -3.6f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.8,1.3,3.7);glutSolidCube(3.0f);glPopMatrix();
}
void tangga(){ glPushMatrix();
glTranslatef(0.0f, -1.5f, 3.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(1.795,0.09,1.795);glutSolidCube(6.0f);glPopMatrix();
//tangga1glPushMatrix();glTranslatef(0.0f, -1.1f, 3.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.7,0.08,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, -0.68f, 3.0f);
glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.5,0.08,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, -0.3f, 3.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.3,0.08,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 0.0f, 2.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.3,0.08,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 0.3f, 1.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.3,0.08,1.795);glutSolidCube(6.0f);glPopMatrix();
//tangga kiri & kananglPushMatrix();glTranslatef(-3.745f, -1.99f, 3.7f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.55,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, -1.99f, 3.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.3,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, -4.09f, 2.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.1,0.8,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(3.745f, -1.99f, 3.7f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.55,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(-4.045f, -2.58f, 4.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(4.045f, -2.58f, 4.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);
glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(-4.045f, -2.98f, 5.3f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(4.045f, -2.98f, 5.3f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(-4.045f, -3.38f, 6.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(4.045f, -3.38f, 6.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(-4.045f, -3.78f, 6.7f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(4.045f, -3.78f, 6.7f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(-4.045f, -4.18f, 7.4f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(4.045f, -4.18f, 7.4f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(-4.045f, -4.58f, 8.1f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(4.045f, -4.58f, 8.1f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(-4.045f, -4.98f, 8.8f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(4.045f, -4.98f, 8.8f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(-4.045f, -5.38f, 9.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(4.045f, -5.38f, 9.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.45,0.1,1.795);glutSolidCube(6.0f);glPopMatrix();
}
void pagartangga(){ //tiang pagar bawah glPushMatrix();
glTranslatef(5.2f, -4.3f, 14.5f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,1.85,0.2);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, -4.3f, 14.5f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,1.85,0.2);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(2.9f, -4.3f, 14.5f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,1.85,0.2);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-2.9f, -4.3f, 14.5f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,1.85,0.2);glutSolidCube(1.0f);glPopMatrix();
//tiang pagar tengahglPushMatrix();glTranslatef(5.2f, -2.8f, 11.8f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,1.85,0.2);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, -2.8f, 11.8f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,1.85,0.2);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(2.9f, -2.8f, 11.8f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,1.85,0.2);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-2.9f, -2.8f, 11.8f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,1.85,0.2);glutSolidCube(1.0f);glPopMatrix();
//tiang pagar atasglPushMatrix();glTranslatef(5.2f, -0.5f, 8.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,1.85,0.2);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, -0.5f, 8.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,1.85,0.2);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(2.9f, -0.5f, 8.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,1.85,0.2);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-2.9f, -0.5f, 8.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,1.85,0.2);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 0.5f, 8.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(1.5,1.85,0.2);glutSolidCube(1.0f);glPopMatrix();
//pegangan pagarglPushMatrix();glTranslatef(5.2f, -1.6f, 11.4f);glRotatef(32,1,0,0);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,0.2,7.6);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, -1.6f, 11.4f);glRotatef(32,1,0,0);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,0.2,7.6);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(2.9f, -1.6f, 11.4f);glRotatef(32,1,0,0);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,0.2,7.6);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-2.9f, -1.6f, 11.4f);glRotatef(32,1,0,0);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,0.2,7.6);glutSolidCube(1.0f);glPopMatrix();
//pegangan pagar atasglPushMatrix();glTranslatef(5.2f, 0.4f, 6.0f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,0.2,4.5);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, 0.4f, 6.0f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.2,0.2,4.5);glutSolidCube(1.0f);glPopMatrix();
//pegangan tangga tengahglPushMatrix();glTranslatef(1.7f, 0.8f, 8.2f);glRotatef(-23,0,0,1);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(2.8,0.2,0.2);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-1.7f, 0.8f, 8.2f);glRotatef(23,0,0,1);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(2.8,0.2,0.2);glutSolidCube(1.0f);glPopMatrix();
}
void lantai2(){
glPushMatrix();glTranslatef(0.0f, 3.2f, 0.0f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(1.2,1.8,1.2);glutSolidCube(6.0f);glPopMatrix();
}
void jendelalantai2(){ //depan belakang
glPushMatrix();glTranslatef(-1.8f, 4.8f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.4,1.85,2.47);glutSolidCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 4.8f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.4,1.85,2.47);glutSolidCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(1.8f, 4.8f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.4,1.85,2.47);glutSolidCube(3.0f);glPopMatrix();
//relief tiangglPushMatrix();glTranslatef(3.1f, 4.8f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.18,1.9,2.45);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(-3.1f, 4.8f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.18,1.9,2.45);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 4.8f, 3.1f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(2.45,1.9,0.18);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 4.8f, -3.1f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(2.45,1.9,0.18);glutWireCube(3.0f);glPopMatrix();
//kiri kanan
glPushMatrix();glTranslatef(0.0f, 4.8f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(2.47,1.85,0.4);glutSolidCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 4.8f, 1.8f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(2.47,1.85,0.4);glutSolidCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 4.8f, -1.8f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(2.47,1.85,0.4);glutSolidCube(3.0f);glPopMatrix();
}
void pagarlantai2(){ //depan kiri kanan glPushMatrix();
glTranslatef(5.2f, 1.3f, 5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(4.2f, 1.3f, 5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(3.2f, 2.08f, 5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(4.3,0.3,0.4);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(3.2f, 1.3f, 5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(2.2f, 1.3f, 5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(1.2f, 1.3f, 5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-1.2f, 1.3f, 5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-2.2f, 1.3f, 5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-3.2f, 1.3f, 5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-3.2f, 2.08f, 5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(4.3,0.3,0.4);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-4.2f, 1.3f, 5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, 1.3f, 5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
//kiriglPushMatrix();glTranslatef(-5.2f, 1.3f, -5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, 1.3f, -4.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, 1.3f, -3.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();
glTranslatef(-5.2f, 1.3f, -2.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, 1.3f, -1.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, 1.3f, 0.0f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, 2.08f, 0.0f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.4,0.3,10.5);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, 1.3f, 1.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, 1.3f, 2.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, 1.3f, 3.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, 1.3f, 4.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
//kananglPushMatrix();glTranslatef(5.2f, 1.3f, -5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(5.2f, 1.3f, -4.2f);glColor4f(2.0, 2.0, 2.0, 2.0);
glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(5.2f, 1.3f, -3.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(5.2f, 1.3f, -2.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(5.2f, 1.3f, -1.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(5.2f, 1.3f, 0.0f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(5.2f, 2.08f, 0.0f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.4,0.3,10.5);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(5.2f, 1.3f, 1.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(5.2f, 1.3f, 2.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(5.2f, 1.3f, 3.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(5.2f, 1.3f, 4.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
//belakangglPushMatrix();glTranslatef(4.2f, 1.3f, -5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(3.2f, 1.3f, -5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(2.2f, 1.3f, -5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(1.2f, 1.3f, -5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 1.3f, -5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 2.08f, -5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(10.5,0.3,0.4);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-1.2f, 1.3f, -5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-2.2f, 1.3f, -5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-3.2f, 1.3f, -5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();
glTranslatef(-4.2f, 1.3f, -5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
glPushMatrix();glTranslatef(-5.2f, 1.3f, -5.2f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.3,1.85,0.3);glutSolidCube(1.0f);glPopMatrix();
}
void lantai3(){
glPushMatrix();glTranslatef(0.0f, 11.5f, 0.0f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(1.1,1.5,1.1);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 8.6f, 0.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(1.28,0.08,1.28);glutSolidCube(6.0f);glPopMatrix();
}
void jendelalantai3(){ //depan belakang
glPushMatrix();glTranslatef(-1.7f, 12.2f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.35,1.8,2.25);glutSolidCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 12.2f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.35,1.8,2.25);glutSolidCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(1.7f, 12.2f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.35,1.8,2.25);glutSolidCube(3.0f);glPopMatrix();
//relief tiangglPushMatrix();glTranslatef(2.8f, 12.2f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.19,2.0,2.25);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(-2.8f, 12.2f, 0.0f);
glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.19,2.0,2.25);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 12.2f, 2.8f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(2.25,2.0,0.19);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 12.2f, -2.8f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(2.25,2.0,0.19);glutWireCube(3.0f);glPopMatrix();
//kiri kanan glPushMatrix();
glTranslatef(0.0f, 12.2f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(2.25,1.8,0.35);glutSolidCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 12.2f, 1.7f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(2.25,1.8,0.35);glutSolidCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 12.2f, -1.7f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(2.25,1.8,0.35);glutSolidCube(3.0f);glPopMatrix();
}
void lantai4(){
glPushMatrix();glTranslatef(0.0f, 19.0f, 0.0f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(1.0,1.2,1.0);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 16.0f, 0.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(1.17,0.08,1.17);glutSolidCube(6.0f);glPopMatrix();
}
void jendelalantai4(){ //depan belakang
glPushMatrix();glTranslatef(-1.2f, 19.4f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);
glScalef(0.5,1.4,2.08);glutSolidCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(1.2f, 19.4f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.5,1.4,2.08);glutSolidCube(3.0f);glPopMatrix();
//relief tiang glPushMatrix();
glTranslatef(-2.5f, 19.4f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.18,1.9,2.08);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(2.5f, 19.4f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.18,1.9,2.08);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 19.4f, -2.5f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(2.08,1.9,0.18);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 19.4f, 2.5f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(2.08,1.9,0.18);glutWireCube(3.0f);glPopMatrix();
//kiri kanan glPushMatrix();
glTranslatef(0.0f, 19.4f, 1.2f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(2.08,1.4,0.5);glutSolidCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 19.4f, -1.2f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(2.08,1.4,0.5);glutSolidCube(3.0f);glPopMatrix();
}
void lantai5(){
glPushMatrix();glTranslatef(0.0f, 25.5f, 0.0f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.89,1.0,0.89);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();
glTranslatef(0.0f, 22.8f, 0.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(1.07,0.08,1.07);glutSolidCube(6.0f);glPopMatrix();
//relief tiangglPushMatrix();glTranslatef(-2.3f, 25.6f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.1,1.5,1.8);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(2.3f, 25.6f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.1,1.5,1.8);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 25.6f, -2.3f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(1.8,1.5,0.1);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 25.6f, 2.3f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(1.8,1.5,0.1);glutWireCube(3.0f);glPopMatrix();
//relief dindingglPushMatrix();glTranslatef(-1.0f, 24.5f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.38,0.5,1.8);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(1.0f, 24.5f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.38,0.5,1.8);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 24.5f, 1.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(1.8,0.5,0.38);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 24.5f, -1.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(1.8,0.5,0.38);glutWireCube(3.0f);glPopMatrix();
}
void jam()
{ //depan belakang
glPushMatrix();glTranslatef(0.0f, 26.5f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(1.4,1.4,27.4);glutWireTorus(0.1f, 0.8f, 12.0f, 12.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 26.5f, 0.0f);glRotatef(90, 5, 260, 0);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(1.4,1.4,27.4);glutWireTorus(0.1f, 0.8f, 12.0f, 12.0f);glPopMatrix();
//jarum jam depanglPushMatrix();glTranslatef(0.0f, 26.8f, 2.6f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.01,0.3,0.1);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(-0.3f, 26.4f, 2.6f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.3,0.01,0.1);glutWireCube(3.0f);glPopMatrix();
//jarum jam belakangglPushMatrix();glTranslatef(0.0f, 26.8f, -2.6f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.01,0.3,0.1);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.3f, 26.4f, -2.6f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.3,0.01,0.1);glutWireCube(3.0f);glPopMatrix();
//jarum jam kananglPushMatrix();glTranslatef(2.6f, 26.8f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.1,0.3,0.01);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(2.6f, 26.4f, 0.3f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.1,0.01,0.3);glutWireCube(3.0f);glPopMatrix();
//jarum jam kiriglPushMatrix();glTranslatef(-2.6f, 26.8f, 0.0f);glColor4f(0.0, 0.0, 0.0, 0.0);
glScalef(0.1,0.3,0.01);glutWireCube(3.0f);glPopMatrix();
glPushMatrix();glTranslatef(-2.6f, 26.4f, -0.3f);glColor4f(0.0, 0.0, 0.0, 0.0);glScalef(0.1,0.01,0.3);glutWireCube(3.0f);glPopMatrix();
//}
void lantaiatas(){ glPushMatrix();
glTranslatef(0.0f, 30.0f, 0.0f);glColor4f(2.0, 2.0, 2.0, 2.0);glScalef(0.7,0.8,0.7);glutSolidCube(6.0f);glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 28.5f, 0.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(1.2,0.08,1.2);glutSolidCube(6.0f);glPopMatrix();
//pagar depanglPushMatrix();glTranslatef(3.5f, 29.0f, 3.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.5,0.05);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(1.25f, 29.0f, 3.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.5,0.05);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 29.2f, 3.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(2.4,0.05,0.05);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 29.7f, 3.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(2.4,0.05,0.05);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(-1.25f, 29.0f, 3.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.5,0.05);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(-3.5f, 29.0f, 3.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.5,0.05);glutSolidCube(3.0f);
glPopMatrix();
//pagar belakang glPushMatrix();
glTranslatef(3.5f, 29.0f, -3.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.5,0.05);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(1.25f, 29.0f, -3.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.5,0.05);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 29.7f, -3.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(2.4,0.05,0.05);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(0.0f, 29.2f, -3.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(2.4,0.05,0.05);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(-1.25f, 29.0f, -3.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.5,0.05);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(-3.5f, 29.0f, -3.5f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.5,0.05);glutSolidCube(3.0f);
glPopMatrix();
//pagar kanan glPushMatrix();
glTranslatef(3.5f, 29.0f, 1.25f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.5,0.05);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(3.5f, 29.2f, 0.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.05,2.4);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();
glTranslatef(3.5f, 29.7f, -0.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.05,2.4);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(3.5f, 29.0f, -1.25f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.5,0.05);glutSolidCube(3.0f);
glPopMatrix();
//pagar kiri glPushMatrix();
glTranslatef(-3.5f, 29.0f, 1.25f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.5,0.05);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(-3.5f, 29.2f, 0.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.05,2.4);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(-3.5f, 29.7f, -0.0f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.05,2.4);glutSolidCube(3.0f);
glPopMatrix();
glPushMatrix();glTranslatef(-3.5f, 29.0f, -1.25f);glColor4f(0.8, 0.8, 0.8, 0.8);glScalef(0.05,0.5,0.05);glutSolidCube(3.0f);
glPopMatrix();}
void atap(){ glPushMatrix();
glTranslatef(0.0f, 32.5f, 0.0f);//glRotatef(-60.0f,1.0f,10.0f,10.0f);glColor4f(0.8, 0.8, 0.8, 0.8);//glScalef(1.0,1.0,3.0);glBegin(GL_QUADS);
glVertex3f(-3.5f, -1.0f, -3.5f); glVertex3f(0.0f, 6.0f, -3.3f); glVertex3f(0.0f, 1.8f, -2.3f); glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(3.5f, -1.0f, -3.5f); glVertex3f(0.0f, 6.0f, -3.3f); glVertex3f(0.0f, 1.8f, -2.3f); glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(-3.5f, -1.0f, 3.5f); glVertex3f(0.0f, 6.0f, 3.3f); glVertex3f(0.0f, 1.8f, 2.3f); glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(3.5f, -1.0f, 3.5f); glVertex3f(0.0f, 6.0f, 3.3f); glVertex3f(0.0f, 1.8f, 2.3f); glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(3.5f, -1.0f, -3.5f); glVertex3f(3.3f, 6.0f, 0.0f); glVertex3f(2.3f, 1.8f, 0.0f); glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(3.5f, -1.0f, 3.5f); glVertex3f(3.3f, 6.0f, 0.0f); glVertex3f(2.3f, 1.8f, 0.0f); glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(-3.5f, -1.0f, 3.5f); glVertex3f(-3.3f, 6.0f, 0.0f); glVertex3f(-2.3f, 1.8f, 0.0f); glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(-3.5f, -1.0f, -3.5f); glVertex3f(-3.3f, 6.0f, 0.0f); glVertex3f(-2.3f, 1.8f, 0.0f); glVertex3f(0.0f, 1.0f, 0.0f); glEnd(); glPopMatrix();}//===========================================BATAS JAM GADANG=====================================================//
//POHONvoid pohon(){ //Batang Cemara glPushMatrix();
glColor3f(0.8f, 0.4f, 0.1f); glScaled(1.1,7,1); glutSolidCube(0.5f); glPopMatrix();
//Daun Bawah glPushMatrix(); glColor3f(0.5f, 0.7f, 0.1f); glTranslatef(0.0f, 1.5f, 0.0f); glRotatef(230, 1.5, 2, 2);
glScaled(2,2,3);glutSolidCone(1.6,1,20,30);glPopMatrix();
//Daun Tengah glPushMatrix(); glColor3f(0.5f, 0.7f, 0.1f); glTranslatef(0.0f, 3.0f, 0.0f); glRotatef(230, 1.5, 2, 2);
glScaled(2,2,3);glutSolidCone(1.3,1,20,30);glPopMatrix();
//Daun Atas glPushMatrix(); glColor3f(0.5f, 0.7f, 0.1f); glTranslatef(0.0f, 4.5f, 0.0f); glRotatef(230, 1.5, 2, 2);
glScaled(2,2,3);glutSolidCone(1.0,1,20,30);
glPopMatrix();
}
//POHON TAMANvoid pohontaman(){ //Batang Pohon Tengah glPushMatrix();
glColor3f(0.5f, 0.5f, 0.5f);glTranslatef(0.0, 1.9, 0.0);
glScaled(0.3 , 7.5, 0.3); glutSolidCube(0.5f); glPopMatrix(); //Lantai glPushMatrix(); glColor3f(1.0, 1.0, 1.0); //glTranslatef(0.0, 3.6, 0.0); glScaled(0.7, 0.09, 0.7); glutSolidCube(0.5f); glPopMatrix(); //Batang Pohon Kiri glPushMatrix();
glColor3f(0.0f, 1.0f, 0.0f);glTranslatef(0.0, 3.6, 0.0);glRotatef(45, 0.0, 0.0, 2.0);
glScaled(0.15 ,5 ,0.15); glutSolidCube(0.5f); glPopMatrix();
//Batang Pohon Kanan glPushMatrix();
glColor3f(0.8f, 0.8f, 0.0f);glTranslatef(0.0, 3.6, 0.0);glRotatef(45, 0.0, 0.0, -2.0);
glScaled(0.15 ,5 ,0.15); glutSolidCube(0.5f); glPopMatrix();
//Batang Pohon Depan glPushMatrix();
glColor3f(1.0f, 0.0f, 0.0f);glTranslatef(0.0, 3.6, 0.0);glRotatef(45, 2.0, 0.0, 0.0);
glScaled(0.15 ,5 ,0.15); glutSolidCube(0.5f); glPopMatrix();
//Batang Pohon Belakang glPushMatrix();
glColor3f(0.0f, 0.0f, 1.0f);glTranslatef(0.0, 3.6, 0.0);glRotatef(45, -2.0, 0.0, 0.0);
glScaled(0.15 ,5 ,0.15); glutSolidCube(0.5f); glPopMatrix();
//Batang Pohon Lurus glPushMatrix();
glColor3f(0.0f, 0.4f, 0.4f);glTranslatef(0.0, 3.6, 0.0);glRotatef(90, -2.0, 0.0, 0.0);
glScaled(0.15 ,5 ,0.15); glutSolidCube(0.5f); glPopMatrix();
//Batang Pohon Lurus glPushMatrix();
glColor3f(0.8f, 0.0f, 0.8f);glTranslatef(0.0, 3.6, 0.0);glRotatef(90, 0.0, 0.0, 2.0);
glScaled(0.15 ,5 ,0.15); glutSolidCube(0.5f); glPopMatrix();}
//BANGKU TAMANvoid bangkutaman1(){ //bangku taman depan glPushMatrix(); glTranslatef(-11.5, 0.0, 2.0); glColor3f(0.8f, 0.4f, 0.1f); glScalef(7.3, 1.5, 2.3); glutSolidCube(1.0f); glPopMatrix();
glPushMatrix(); glTranslatef(-11.5, 1.0, 3.2); glColor3f(0.8f, 0.4f, 0.1f); glScalef(7.3, 1.5, 0.3); glutSolidCube(1.0f); glPopMatrix();}
void bangkutaman2(){ //bangku taman belakang glPushMatrix(); glTranslatef(-11.5, 0.0, -2.0); glColor3f(0.8f, 0.4f, 0.1f); glScalef(7.3, 1.5, 2.3); glutSolidCube(1.0f); glPopMatrix();
glPushMatrix(); glTranslatef(-11.5, 1.0, -3.2); glColor3f(0.8f, 0.4f, 0.1f); //glRotatef(-8.5f, 1.0f, 0.0f, 0.0f); glScalef(7.3, 1.5, 0.3); glutSolidCube(1.0f); glPopMatrix();}
void bangkutaman3(){ //bangku taman belakang glPushMatrix(); glTranslatef(-11.5, 0.0, -0.0); glColor3f(0.8f, 0.4f, 0.1f); glScalef(2.3, 1.5, 7.3); glutSolidCube(1.0f); glPopMatrix();
glPushMatrix(); glTranslatef(-10.5, 1.0, -0.0); glColor3f(0.8f, 0.4f, 0.1f); glScalef(0.3, 1.5, 7.3); glutSolidCube(1.0f); glPopMatrix();}
void bangkutaman4(){ //bangku taman belakang glPushMatrix(); glTranslatef(-11.5, 0.0, -0.0); glColor3f(0.8f, 0.4f, 0.1f); glScalef(2.3, 1.5, 7.3); glutSolidCube(1.0f); glPopMatrix();
glPushMatrix(); glTranslatef(-12.5, 1.0, -0.0); glColor3f(0.8f, 0.4f, 0.1f); glScalef(0.3, 1.5, 7.3); glutSolidCube(1.0f); glPopMatrix();}
//JALUR TAMANvoid jalur(){ //Dasar glPushMatrix();
glColor4f(0.5f, 0.5f, 0.5f, 1.0f);glTranslatef(-0.9, 0.0, 0.0);glScalef(3.0,0.02,4.5);glutSolidCube(9.0f);
glPopMatrix();
glPushMatrix(); glTranslatef(20.4, .0, -35.0); //Dasar2 glPushMatrix(); glColor3f(0.0, 0.0, 0.0); glTranslatef(0.0, 0.0, 28.5); glScalef(1.7, 0.02, 1.9);
glutSolidCube(9.0f); glPopMatrix();
//Trotoar kanan glPushMatrix(); glColor3f(0.5, 0.5, 0.5); glTranslatef(0.0, 0.0, 20.3); glScalef(1.6,0.1, 0.05);
glutSolidCube(9.0f); glPopMatrix();
//Trotoar Kiri glPushMatrix(); glColor3f(0.5, 0.5, 0.5); glTranslatef(0.0, 0.0, 36.7); glScalef(1.6,0.1, 0.05);
glutSolidCube(9.0f); glPopMatrix();
glPopMatrix();
}
//KINCIRvoid kincir(){ /*//Lantai glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(0.0, -15.0, 0.0);
glScalef(4.0, 1.09, 2.5);
glutSolidCube(6.0f); glPopMatrix();*/
//Atap1 glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(0.0, 0.0, 0.0);
glScalef(3.0,0.09,1.5);glutSolidCube(6.0f);
glPopMatrix();
//Atap2 glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(0.0, -7.0, 0.0);
glScalef(3.0,0.09,1.5);glutSolidCube(6.0f);
glPopMatrix();
//Atap3 glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(0.0, 7.0, 0.0);
glScalef(3.0,0.09,1.5);glutSolidCube(6.0f);
glPopMatrix();
//Atap4 glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(0.0, 14.0, 0.0);
glScalef(3.0,0.09,1.5);glutSolidCube(6.0f);
glPopMatrix();
//Atap5 glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(0.0, 21.0, 0.0);
glScalef(3.0,0.09,1.5);glutSolidCube(6.0f);
glPopMatrix();
//Generator glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(0.0, 22.0, 0.0);
glScalef(2.0,0.59,1.0);glutSolidCube(6.0f);
glPopMatrix(); /*//Listrik Bawah glPushMatrix(); glColor4f(1.8, 0.8, 0.8, 0.8); glTranslatef(-1.0, 26.0, 0.0);
glScalef(0.1,0.1,0.1);glutSolidSphere(5, 20, 30);
glPopMatrix(); //Listrik Tengah glPushMatrix(); glColor4f(1.8, 0.8, 0.8, 0.8); glTranslatef(-1.0, 27.0, 0.0);
glScalef(0.1,0.1,0.1);glutSolidSphere(5, 20, 30);
glPopMatrix(); //Listrik Atas glPushMatrix();
glColor4f(1.8, 0.8, 0.8, 0.8); glTranslatef(-1.0, 28.0, 0.0);
glScalef(0.1,0.1,0.1);glutSolidSphere(5, 20, 30);
glPopMatrix(); */
//Pemutar Depan glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(0.0, 23.0, 4.0);
glScalef(0.2,0.09,1.0);glutSolidCube(6.0f);
glPopMatrix(); //Bulatan glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(0.0, 23.0, 6.5);
glScalef(0.2,0.2,0.2);glutSolidSphere(5, 20, 30);
glPopMatrix(); //Pemutar Belakang glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(0.0, 22.0, -10.0);
glScalef(0.2,0.59,0.5);glutSolidCube(6.0f);
glPopMatrix();
glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(0.0, 22.0, -5.0);
glScalef(0.2,0.19,1.7);glutSolidCube(6.0f);
glPopMatrix();
glPushMatrix(); glColor4f(1.0, 1.8, 0.8, 0.8); glTranslatef(0.0, 22.0, -10.0); glScalef(0.8, 0.1, 0.5); glutSolidCube(6.0f); glPopMatrix();
//Tiang Kiri Depan glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(-7.5, 0.0, 2.5);
glScalef(0.15,7.0,0.25);glutSolidCube(6.0f);
glPopMatrix();
//Tiang Kiri Belakang glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(-7.5, 0.0, -2.5);
glScalef(0.15,7.0,0.25);glutSolidCube(6.0f);
glPopMatrix();
//Tiang Kanan Depan glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(7.5, 0.0, 2.5);
glScalef(0.15,7.0,0.25);glutSolidCube(6.0f);
glPopMatrix();
//Tiang Kanan Belakang glPushMatrix(); glColor4f(0.8, 0.8, 0.8, 0.8); glTranslatef(7.5, 0.0, -2.5);
glScalef(0.15,7.0,0.25);glutSolidCube(6.0f);
glPopMatrix();
//Kipas glPushMatrix(); glTranslatef(0.0, 23.0, 6.5); glColor4f(0.0, 0.0, 0.0, 1.0); glScalef(2.15, 2.0, 0.55);
glRotatef(sudutk, 0.0f, 0.0f, 1.0f); glutWireTorus(1, 5, 10, 15); glPopMatrix();
glPushMatrix(); glTranslatef(0.0, 23.0, 6.5); glColor4f(0.0, 0.0, 0.0, 1.0); glScalef(1.15, 1.0, 0.55);
glRotatef(sudutk, 0.0f, 0.0f, 1.0f); glutWireTorus(1, 5, 10, 15); glPopMatrix();
glPushMatrix(); glTranslatef(0.0, 23.0, 6.5); glColor4f(0.0, 0.0, 0.0, 1.0); glScalef(0.55, 0.5, 0.55);
glRotatef(sudutk, 0.0f, 0.0f, 1.0f); glutWireTorus(1, 5, 10, 15); glPopMatrix();
glPushMatrix(); glTranslatef(0.0, 23.0, 6.5); glColor4f(0.0, 0.0, 0.0, 1.0); glScalef(3.15, 3.0, 0.55);
glRotatef(sudutk, 0.0f, 0.0f, 1.0f); glutWireTorus(1, 5, 10, 15); glPopMatrix();
}
//PUTAR KIPASvoid putar(int value){ sudutk += 5.0f; if (sudutk > 360){ sudutk -= 360; }
glutPostRedisplay(); glutTimerFunc(25, putar, 0);}
//BUSvoid bus(){ //Bodi glColor3f(1.0, 0.8, 0.0); glPushMatrix(); //glRotatef(sudutk, 0.0, 0.0, 1.0); glTranslatef(0.0, 3.8, 0.0); glScalef(4.0, 1.0, 1.5); glutSolidCube(6.0f);
glPopMatrix();
//Kaca Belakang glColor3f(0.0, 0.0, 1.0); glPushMatrix(); glTranslatef(-12.0, 5.0, 0.0); glScalef(0.05, 0.5, 1.2); glutSolidCube(6.0f); glPopMatrix();
//Lampu Rem glColor3f(1.0, 0.0, 0.0); glPushMatrix(); glTranslatef(-12.1, 2.0, -3.5); glScalef(0.02, 0.19, 0.08); glutSolidCube(6.0f); glPopMatrix();
glColor3f(1.0, 0.0, 0.0); glPushMatrix(); glTranslatef(-12.1, 2.0, 3.5); glScalef(0.02, 0.19, 0.08); glutSolidCube(6.0f); glPopMatrix();
//Lampu Depan glColor3f(1.0, 1.0, 1.0); glPushMatrix(); glTranslatef(12.1, 2.0, -3.5); glScalef(0.05, 0.02, 0.1); glutSolidCube(6.0f); glPopMatrix();
glColor3f(1.0, 1.0, 1.0); glPushMatrix(); glTranslatef(12.1, 2.0, 3.5); glScalef(0.05, 0.02, 0.1); glutSolidCube(6.0f); glPopMatrix();
//Kaca Depan glColor3f(0.0, 0.0, 1.0); glPushMatrix(); glTranslatef(12.0, 5.0, 0.0); glScalef(0.05, 0.5, 1.2); glutSolidCube(6.0f); glPopMatrix(); //Kaca pinggir glColor3f(0.0, 0.0, 1.0); glPushMatrix(); glTranslatef(-1.5, 5.0, 4.0); glScalef(3.3, 0.5, 0.2); glutSolidCube(6.0f); glPopMatrix();
glColor3f(0.0, 0.0, 1.0); glPushMatrix(); glTranslatef(-1.5, 5.0, -4.0); glScalef(3.3, 0.5, 0.2); glutSolidCube(6.0f); glPopMatrix(); //Pintu Kanan glColor3f(0.5, 0.5, 0.5); glPushMatrix(); glTranslatef(11.1, 3.9, 4.0); glScalef(0.15, 0.8, 0.2);
glutSolidCube(6.0f); glPopMatrix();
glPushMatrix(); glColor3f(0.5, 0.5, 0.5); glTranslatef(10.1, 5.1, 4.0); glScalef(0.25, 0.4, 0.2); glutSolidCube(6.0f); glPopMatrix(); //Pintu Kiri glColor3f(0.5, 0.5, 0.5); glPushMatrix(); glTranslatef(11.1, 3.9, -4.0); glScalef(0.15, 0.8, 0.2); glutSolidCube(6.0f); glPopMatrix();
glPushMatrix(); glColor3f(0.5, 0.5, 0.5); glTranslatef(10.1, 5.1, -4.0); glScalef(0.25, 0.4, 0.2); glutSolidCube(6.0f); glPopMatrix();
//Ban Belakang glPushMatrix(); glColor3f(1.0, 1.0, 1.0); glScalef(0.35, 0.35, 0.25); glTranslatef(25.0, 4.5, 19.3); glutSolidTorus(2, 3, 20, 30); glPopMatrix(); //Velg glPushMatrix(); glColor3f(0.0, 0.0, 0.0); glScalef(0.5, 0.5, 0.5); glTranslatef(17.5, 2.5, 8.0); glutSolidSphere(2, 10, 20); glPopMatrix();
glPushMatrix(); glColor3f(1.0, 1.0, 1.0); glScalef(0.35, 0.35, 0.25); glTranslatef(25.0, 4.5, -19.3); glutSolidTorus(2, 3, 20, 30); glPopMatrix(); //Velg glPushMatrix(); glColor3f(0.0, 0.0, 0.0); glScalef(0.5, 0.5, 0.5); glTranslatef(-17.5, 2.5, 8.0); glutSolidSphere(2, 10, 20); glPopMatrix();
//Ban Depan glPushMatrix(); glColor3f(1.0, 1.0, 1.0); glScalef(0.35, 0.35, 0.25); glTranslatef(-25.0, 4.5, -19.3); glutSolidTorus(2, 3, 20, 30); glPopMatrix(); //Velg glPushMatrix(); glColor3f(0.0, 0.0, 0.0); glScalef(0.5, 0.5, 0.5); glTranslatef(17.5, 2.5, -8.0);
glutSolidSphere(2, 10, 20); glPopMatrix();
glPushMatrix(); glColor3f(1.0, 1.0, 1.0); glScalef(0.35, 0.35, 0.25); glTranslatef(-25.0, 4.5, 19.3); glutSolidTorus(2, 3, 20, 30); glPopMatrix(); //Velg glPushMatrix(); glColor3f(0.0, 0.0, 0.0); glScalef(0.5, 0.5, 0.5); glTranslatef(-17.5, 2.5, -8.0); glutSolidSphere(2, 10, 20); glPopMatrix();}
unsigned int LoadTextureFromBmpFile(char *filename);
void display(void) {glClearStencil(0); //clear the stencil bufferglClearDepth(1.0f);glClearColor(0.0, 0.6, 0.8, 1);glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); //clear the buffers
glLoadIdentity();gluLookAt(viewx-110, viewy+20, viewz+20, 0.0, 10.0,
5.0, 0.0, 1.0, 0.0);
glPushMatrix();
//glBindTexture(GL_TEXTURE_3D, texture[0]);drawSceneTanah(_terrain, 0.0f, 0.5f, 0.0f);glPopMatrix();
glPushMatrix();
//glBindTexture(GL_TEXTURE_3D, texture[0]);drawSceneTanah(_terrainTanah, 0.0f, 0.0f, 0.0f);glPopMatrix();
glPushMatrix();
//glBindTexture(GL_TEXTURE_3D, texture[0]);drawSceneTanah(_terrainAir, 0.0f, 0.2f, 0.5f);glPopMatrix();
//=========================================================================================////====================================MULAI OBJEK===========================================////=========================================================================================//
//LAMPU //kiri depan glPushMatrix(); glTranslatef(0.3,0.05,-5.0); lampu(); glPopMatrix(); //kiri belakang glPushMatrix();
glTranslatef(0.3,0.05,-45.0); lampu(); glPopMatrix(); //kanan depan glPushMatrix(); glTranslatef(35.8,0.05,-5.0); lampu(); glPopMatrix(); //kanan belakang glPushMatrix(); glTranslatef(35.8,0.05,-45.0); lampu(); glPopMatrix();
//LAMPU JALAN for (int i = -2; i < 3; i++) { glPushMatrix(); glTranslatef(i*35, 5, 38); lampuJalan(); glPopMatrix(); }
for (int i = -2; i < 3; i++) { glPushMatrix(); glTranslatef(i*35, 5, 11); lampuJalan2(); glPopMatrix(); }
//BANGUNAN glPushMatrix(); glTranslatef(18.0,-0.5,-25.0); bangunan(); glPopMatrix();
//JALUR TAMAN glPushMatrix(); glTranslatef(-28.0,-0.5,-25.0); jalur(); glPopMatrix();
//JAM GADANG glPushMatrix(); glTranslatef(18.0, 9.0,-35.0); glScaled(1.7, 1.7, 1.7); lantai1(); jendelalantai1(); tangga(); pagartangga(); lantai2(); jendelalantai2(); pagarlantai2(); lantai3(); jendelalantai3(); lantai4(); jendelalantai4(); lantai5(); jam(); lantaiatas(); atap(); glPopMatrix();
//POHONfor (int i = -5; i < 5; i++)
{ glPushMatrix(); glTranslatef(i*15, 1, 54); pohon(); glPopMatrix(); } glPushMatrix(); glTranslatef(75.0,1,54.0); pohon(); glPopMatrix();
//Pohon belakang glPushMatrix(); glTranslatef(65.0,7,-35.0); pohon(); glPopMatrix();
//Pohon Pinggir glPushMatrix(); glTranslatef(-50, 1.2, -45); pohon(); glPopMatrix();
//Pohon Pinggir glPushMatrix(); glTranslatef(-55, 1.2, -15); pohon(); glPopMatrix();
//Pohon Pinggir glPushMatrix(); glTranslatef(-62, 1.2, 1.7); pohon(); glPopMatrix();
//Pohon Taman Depan glPushMatrix(); glColor4f(0.0f, 0.8f, 0.0f, 1.0f); glScalef(3.0, 3.0, 3.0); glTranslatef(-5.5, -0.1, -1.7); pohontaman(); glPopMatrix();
//Pohon Taman Depan glPushMatrix(); glColor4f(0.0f, 0.8f, 0.0f, 1.0f); glScalef(3.0, 3.0, 3.0); glTranslatef(-13.9, -0.1, -1.7); pohontaman(); glPopMatrix();
//Pohon Taman Belakang glPushMatrix(); glColor4f(0.0f, 0.8f, 0.0f, 1.0f); glScalef(3.0, 3.0, 3.0); glTranslatef(-5.5, -0.1, -14.9); pohontaman(); glPopMatrix();
//Pohon Taman Belakang glPushMatrix(); glColor4f(0.0f, 0.8f, 0.0f, 1.0f); glScalef(3.0, 3.0, 3.0); glTranslatef(-13.9, -0.1, -14.9); pohontaman();
glPopMatrix();
//Pohon Taman Tengah glPushMatrix(); glColor4f(0.0f, 0.8f, 0.0f, 1.0f); glScalef(3.0, 3.0, 3.0); glTranslatef(-9.5, -0.1, -8.9); pohontaman(); glPopMatrix();
//Bangku Taman depan kiri glPushMatrix(); glScalef(1.0f,1.0f,1.0f); glTranslatef(-27.0,-0.1,-8.9); bangkutaman1(); glPopMatrix();
//Bangku Taman depan kanan glPushMatrix(); glScalef(1.0f,1.0f,1.0f); glTranslatef(-8.0,-0.1,-8.9); bangkutaman1(); glPopMatrix();
//Bangku Taman belakang kiri glPushMatrix(); glScalef(1.0f,1.0f,1.0f); glTranslatef(-27.0,-0.1,-41.0); bangkutaman2(); glPopMatrix();
//Bangku Taman belakang kanan glPushMatrix(); glScalef(1.0f,1.0f,1.0f); glTranslatef(-8.0,-0.1,-41.0); bangkutaman2(); glPopMatrix();
//Bangku Taman kanan belakang glPushMatrix(); glScalef(1.0f,1.0f,1.0f); glTranslatef(-5.5,-0.1,-40.5); bangkutaman3(); glPopMatrix();
//Bangku Taman kanan depan glPushMatrix(); glScalef(1.0f,1.0f,1.0f); glTranslatef(-5.5,-0.1,-9.2); bangkutaman3(); glPopMatrix();
//Bangku Taman kiri depan glPushMatrix(); glScalef(1.0f,1.0f,1.0f); glTranslatef(-29.5,-0.1,-9.2); bangkutaman4(); glPopMatrix();
//Bangku Taman kiri belakang glPushMatrix(); glScalef(1.0f,1.0f,1.0f); glTranslatef(-29.5,-0.1,-40.5); bangkutaman4(); glPopMatrix();
//MARKA JALAN for (int i = -3; i < 4; i++) { glPushMatrix(); glTranslatef(i*22, 0.0, 25); marka(); glPopMatrix(); }
//PAGAR glPushMatrix(); glTranslatef(27, 0.0, 42); pagar(); glPopMatrix();
//BUS glPushMatrix(); glTranslatef(a-27, b-0.0, c+18); bus(); glPopMatrix();
//KINCIRglPushMatrix();glScalef(0.5, 0.5, 0.5);glTranslatef(124.0, 20.0,-63.0);glRotatef(45, 0.0, -1.0, 0.0); glPushMatrix(); glTranslatef(-20.0,-0.5,-25.0); kincir(); glPopMatrix();glPopMatrix();
glutSwapBuffers();glFlush();rot++;angle++;
}
void init(void) {glEnable(GL_DEPTH_TEST);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glDepthFunc(GL_LESS);glEnable(GL_NORMALIZE);glEnable(GL_COLOR_MATERIAL);glDepthFunc(GL_LEQUAL);glShadeModel(GL_SMOOTH);glHint(GL_PERSPECTIVE_CORRECTION_HINT,
GL_NICEST);glEnable(GL_CULL_FACE);
_terrain = loadTerrain("Terrain.bmp", 20);_terrainTanah = loadTerrain("Jalan.bmp", 20);_terrainAir = loadTerrain("heightmapAir.bmp", 20);
//binding texture
}
static void kibor(int key, int x, int y) {switch (key) {case GLUT_KEY_HOME:
viewy++;
break;case GLUT_KEY_END:
viewy--;break;
case GLUT_KEY_UP:viewz--;break;
case GLUT_KEY_DOWN:viewz++;break;
case GLUT_KEY_RIGHT:viewx++;break;
case GLUT_KEY_LEFT:viewx--;break;
/*case GLUT_KEY_F1: {glLightfv(GL_LIGHT0, GL_AMBIENT,
light_ambient);glLightfv(GL_LIGHT0, GL_DIFFUSE,
light_diffuse);glMaterialfv(GL_FRONT, GL_AMBIENT,
mat_ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE,
mat_diffuse);}
;break;
case GLUT_KEY_F2: {glLightfv(GL_LIGHT0, GL_AMBIENT,
light_ambient2);glLightfv(GL_LIGHT0, GL_DIFFUSE,
light_diffuse2);glMaterialfv(GL_FRONT, GL_AMBIENT,
mat_ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE,
mat_diffuse);}
;break;*/
default:break;
}}
void newkeyboard(unsigned char key, int x, int y) {/*if (key == 'd') {
spin = spin - 1;if (spin > 360.0)
spin = spin - 360.0;}if (key == 'a') {
spin = spin + 1;if (spin > 360.0)
spin = spin - 360.0;}*/if (key == 'q') {
viewz++;}if (key == 'e') {
viewz--;}if (key == 's') {
viewy--;}if (key == 'w') {
viewy++;}
//UNTUK BUS if (key == 'm'){ a+=-1; d+=1; b=0; c=0; } else if (key=='n'){ d+=-1; a+=1; b=0; c=0; } if (key == 27){ //ESC exit(0); }}
void reshape(int w, int h) {glViewport(0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60, (GLfloat) w / (GLfloat) h, 0.1,
1000.0);glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char **argv) {glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA |
GLUT_STENCIL | GLUT_DEPTH); //add a stencil buffer to the window
glutInitWindowSize(800, 600);glutInitWindowPosition(100, 100);glutCreateWindow("Tugas Besar Grafkom- Jam
Gadang");init();initRendering();
glutDisplayFunc(display);glutIdleFunc(display);glutReshapeFunc(reshape);glutSpecialFunc(kibor);
glutKeyboardFunc(newkeyboard);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);glMaterialfv(GL_FRONT, GL_SHININESS,
high_shininess);glColorMaterial(GL_FRONT, GL_DIFFUSE);
glutTimerFunc(25, putar, 0);glutMainLoop();return 0;
}