Jumat, 04 November 2016



PEMOGRAMAN  GRAFIK

Nama    : Dian Ari Fitriana
Nomor  : 04                     
Kelas     :XII RPL 2
Email    :arifitrianadian@gmail.com
Blog       :dianari79.blogspot


Smk muhammadiyah 04 boyolali

DAFTAR ISI
K1. Memahami Grafika komputer dan pemakaiannya
1.Definisi Komputer rafik
2.Perangkat-perangkat Grafika Komputer
3.Definisi foto dan Gambar
K2.Memahami Konsep Dasar Library Grafik
1.Setting Library Open GL Pada OS
2.Window area menggambar
3.Komponen –komponen Open GL
K3.Memahami Pembuatan Primitif Drawing
1.Titik
2.Garis
3.PolyLine
4.Polygon
K4.Memahami Grafik 2 Dimensi
1.Definisi Objek Grafik 2 Dimensi
2.Definisi Warna objek grafik 2 dimensi
3.Membuat objek 2 dimensi
4.Membuat Struktur data objek 2 dimensi
5.Membuat Struktur data objek warna
6.Menggambar objek 2 dimensi
K5.Menerapkan transformasi objek 2 dimensi
1.Struktur data titik dan vektor
2.Perubahan Strukur data
3.Translasi
4.Calling
5.Rotasi
6.Perkalian Matriks
7.Komposisi-komposisi transformasi
K6.Menerapkan pembuatan model objek 3 dimensi
1.Definisi objek grafik 3 dimensi
2.Definisi warna objek grafik 3 dimensi
3.Membuat objek grafik 3 dimensi
4.Koordinat System
5.Kamera Transformation
6.Membuat definisi warna objek grafik 3 dimensi
7.Membuat objek grafik 3 dimensi(prisma dan kubus)







BAB I . Memahami Grafika computer dan Pemakaiannya 
1. Definisi
Grafika komputer (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. Aplikasi grafika komputer Grafika komputer dapat digunakan di berbagai bidang kehidupan, mulai dari bidang seni, sains, bisnis, pendidikan dan juga hiburan.

Berikut adalah bidang aplikasi spesifik dari grafika komputer :
  • Antarmuka pengguna (Graphical User Interface - GUI)
  • Peta (Cartography)
  • Kesehatan
  • Perancangan objek (Computer Aided Design - CAD)
  • Sistem multimedia
  • Presentasi grafik
  • Presentasi saintifik
  • Pemrosesan citra
  • Simulasi  
Pembagian grafika komputer Bagian dari grafika komputer meliputi :
  • Geometri: mempelajari cara menggambarkan permukaan bidang
  • Animasi: mempelajari cara menggambarkan dan memanipulasi gerakan
  • Rendering: mempelajari algoritma untuk menampilkan efek cahaya
  • Citra (Imaging): mempelajari cara pengambilan dan penyuntingan gambar. 


Kerangka Grafik Komputer

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJJMcFstJZdXErGMq4og-fOwQARAJOXRnGm_73Z1yIMGJc3xs1qnl58S4qwGB_62KwtjAmRDSkF3jHXzwKYXCwiTe1GsShZ7Spjfid7-n8PIHzqRMpx7bNjnc2VAdM96nrY77Jr1fqBMg/s400/kerangka+grafkom.jpg




Perangkat Keras (Hardware). 
Perangkat keras yang diperlukan untuk keperluan grafis antara lain :

1. Procesor CPU (Central Processing Unit)
Merupakan otak komputer, Di dalam komputer CPU lah yang membuat semua perhitungan, instruksi dan menerjemahkan instruksi dari aplikasi komputer. Komponen procesor (CPU, Central Processing Unit) yang dibutuhkan dalam hal ini harus memiliki kemampuan tinggi dalam menghitung fungsi matematis yang rumit. Sebagai contoh adalah proses pengolahan gambar yang rumit seperti rendering.
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggDTy0-uun2sDIfOGoxcreSGX99VbdOdzUdNyprLqGcAjmr7pM60LR-hG8leiw62iQ8-c6cAjware7qKHDGHOZHXDaf0Bnot8mCyB4E55QnIFFGWg1BGJholMxAaIN_UKJAfmIpPFPQqc/s200/hasil+rendering.jpg hasil gambar rendering


2. Kecepatan (clock)
Kendati prosesor sudah mendukung, tetapi jika kerja komputer itu lambat maka tenaga yang kuat itu tidak dimanfaatkan secara maksimal. Oleh karena itu masalah kecepatan (clock ) juga perlu mendapat perhatian sendiri. Dengan frekuensi (Hz) yang tinggi maka kinerja komputer juga semakin tinggi. Tapi perlu diingat bahwa produk yang dibuat dengan hanya mengandalkan clock yang tinggi belum tentu menjamin kehandalan kerja komputer.

3. Monitor
Monitor adalah piranti untuk melihat sesuatu, juga disebut layar atau tampilan. Sesuatu yang dirancang atau digambar perlu dilihat dengan layar komputer. Oleh karena itu diperlukan layar yang mampu menampilkan gambar dalam resolusi(kerapatan) yang tinggi. Hal ini sangat perlu karena menyangkut presisi gambar atau rancangan yang akan dihasilkan. Semakin tinggi resolusi layar yang digunakan semakin pemakai dapat mengamati dengan lebih teliti rancangan yang berpresisi tinggi agar diperoleh hasil yang lebih bagus.

4. Kartu VGA (VGA card)
Kartu VGA berfungsi untuk merubah sinyal-sinyal komputer menjadi sinyal gambar yang akan ditampilkan ke dalam monitor. Kartu VGA ini juga berperan besar dalam proses penampilan warna dalam monitor, khususnya untuk gambar-gambar beresolusi tinggi.

5. Memori (RAM)
Dalam menggunakan program desain atau gambar yang mempunyai resolusi serta presisi tinggi, maka sebaiknya menggunakan RAM yang berkapasitas besar. Karena dalam menangani file-file gambar berkapasitas besar akan mempercepat proses dan menghindari kemungkinan komputer hang ataucrash.

6. Perekam (Hard Disk)
Gambar-gambar yang telah dibuat tidak akan ditinggalkan begitu saja, juga belum tentu langsung jadi dalam sekali kerja. Oleh karena itu perlu media penyimpanan untuk menampung informasi gambar tersebut. Semakin tinggi resolusi gambar semakin banyak informasi yang harus direkam. Hal ini tentu saja membutuhkan space (tempat) penyimpanan yang lebih besar. Pemakaian hard disk sudah menjadi keharusan. Hard disk seringkali disebut hard disk drive, yaitu kumpulan piringan yang berputar dalam komputer yang berfungsi menyimpan file data.

7. Printer
Gambar yang telah dirancang dengan menggunakan komputer dapat direproduksi dengan menggunakan printer. Untuk menghasilkan mutu gambar yang bagus biasanya digunakan printer jenis laser. Selain untuk mencetak hasil akhir suatu pekerjaan printer juga untuk pengecekan gambar pra-cetak.

8. Perekam gambar (Scanner)
Untuk keperluan menggambar, pemakai komputer membutuhkan suatu kerangka gambar. Untuk itu diperlukan suatu peralatan masukan yang dapat menerima citra gambar atau bahkan suatu bentuk tiga dimensi. Peralatan tersebut adalah scanner dan kamera elektronik. Scanner berfungsi untuk memasukkan citra gambar (dua dimensi) ke dalam komputer. Setelah gambar diterima, selanjutnya gambar dapat diubah-ubah sesuai keinginan (di-edit).

9. Kamera
Citra obyek tiga dimensi tidak mungkin dapat ditangkap oleh scanner. Untuk itu digunakan sebuah kamera yang bekerja seperti mata manusia. Informasi yang diterima oleh kamera diubah menjadi bentuk digital, kemudian diteruskan kepada komputer. Kamera dilengkapi dengan dengan fasilitas pencerna warna, karena itu citra yang berwarna akan otomatis terekam berikut warnanya dalam komputer. 10. Mouse Dalam proses pengerjaan menggambar atau mendesain, sering kali pemakai computer berpindah-pindah dari posisi gambar satu ke posisi gambar lainnya. Oleh karena itu diperlukan bantuan peralatan yang mampu mengaksesnya secara cepat. Peralatan tersebut adalah mouse, dan bukan keyboard. Dengan menggunakan keyboard mungkin gerakan yang dilakukan bisa lebih presisi, namun perpindahan posisi bisa sangat lambat. Dengan menggunakan mouse hal tersebut bisa lebih cepat dilakukan. Kelebihan dengan menggunakan mouse adalah lebih mudahnya melakukan proses terhadap gambar yang sedang dihadapi.

Perangkat Lunak (software).
Pemakaian komputer dalam dunia grafis di bagi dalam beberapa golongan. Diantaranya adalah kelompok paket program yang berfungsi untuk menggambar (seni),untuk keperluan animasi, untuk desain atau merancang, dan untuk menunjang keperluanpublikasi.
Perangkat lunak yang diperlukan untuk keperluan grafis antara lain :

1. Pengolah Grafis 2 D
Kelompok yang pertama dikategorikan sebagai program grafis yang berfungsi untuk menggambar, desain, atau ilustrasi. Termasuk di dalamnya adalah program-program kecil yang biasa dimanfaatkan untuk membuat kartu ucapan selamat, sertifikat, logo,dan sejenisnya.
Produk-produk berbasis grafis 2D yang tersedia antara lain :
• Adobe Photoshop
• Adobe Illustrator
• Adobe Pagemake
• Macromedia FreeHand
• Corel DRAW

2. Pengolah Grafis 3 D
Pengolah grafis animasi dipisahkan tersendiri karena memiliki fungsi-fungsi khusus yaitu untuk menayangkan gambar demi gambar dengan berbagai macam efek yang menarik. Dengan demikian software jenis ini sangat cocok untuk dipakai mempresentasikan sesuatu.
Adapun paket-paket berbasis grafis 3D yang tersedia adalah antara lain:
• Kinetix 3D Studio Max
• Specular Infini-D
• Fire
• Flame
• Flint RT
• Softimage 3D
• Wafefront’s Power Animator
• Macromedia Extreme 3D














K2.MEMAHAMI KONSEPDASAR LIBRARY GRAFIK
Cara Install dan Menjalankan OpenGL Menggunakan CodeBlocks

Langkah 1.
Download CodeBlocks dan MinGW di link ini. Pilih OS yang kalian gunakan. Kalau pengguna Windows, langsung aja pilih yang tulisannya "codeblocks-13.12mingw-setup.exe". Pilih download dari Sourceforge.net.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz92sUpHeW-b1IkMJCez42BklCyhZ7kmUqbCL_7eWS0NudK8umnIqwhxOwFKzfw7fwkt9z33KNzMAt5Vo2sHhv55JHNH3xula0Fu3MgALDa8D1ZDuVN5XD6dWZrh_fJEgo4ZbkxgJweTaw/s1600/2014-10-30+23_32_51-Download+binary+-+Spark+Browser.png
Langkah 2.
Kalau udah di download installer CodeBlocks nya, sekarang download file "Glut.zip" di sini.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihcVQ8obIiRxwLyUi7YrQ_KnkjMTLToeeBQstFX_RH_AOpUeNYVnOXZed-hYIxZpVY7CFCyA2shJzj4uOUVVhkaGsmp-qR-OOggyh9aF_PEjxVxgeUrsKt-qWJ0fCVu_v7sqnmsJOLSVmq/s1600/2014-10-30+23_42_32-glut+-+Unduh+-+4shared+-+Spark+Browser.png

Langkah 3.
Install file "codeblocks-13.12mingw-setup.exe" yang udah kamu install di langkah pertama tadi. Klik next terus hingga installasinya complete.



https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN-XVnIei_zlACvVuaCgWjh_glQWcCZCQ2JW06SKbPP1h3envglie9pX5fBDN1Td3Cragww59pQEdVX7Ieb1WsMzStjG1FGhkotEQCvuaxdorZyDVBiw28P3lLcrxjajFMHq4WLQhIDRbJ/s1600/2014-10-30+23_40_32-Code__Blocks+Installation.png

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyR3pFJ-6gz7iKhZK11ynmRkKHBwbu89Xtryfft_deByMxjGwibMkHa52sUkwW2chFN-VmzHe7Tn73GdsXri-2_b4mXkWFcyCucBuvpf96twboZGdWpVIzoB2L8igxVfKHAsQhyguzs7W7/s1600/2014-10-30+23_40_44-Compilers+auto-detection.png

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaHzxI_R5_w77K8nJON6N9qpg86RXIvuJ9SpTFKyQwsVDdlnYGYWI8RJ0j3dUc4wOQvK0p9xpidecoWPoMOXu6yyaxh3_FTxnX5p_CWsuHb7orQpRs57wHesl9Z5bmffjKFp6_ieNEn1HU/s1600/2014-10-30+23_41_50-File+associations.png

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqnV9sDTj9kepiYfGrGW6RDzci1DzkbyAET5kYm7UOEXllkbwFMuxRgdBODom7uUQr1D7A1ljzgs_yrvMo_TLdYIIQauPQJ58dIoleOBiBmMzZ90YfzUwNdP4KEb448K50K1cK6cnChxRY/s1600/2014-10-30+23_42_04-Start+here+-+Code__Blocks+13.12.png

Langkah 4.
Sekarang ekstrak file "Gult.zip" yang udah di download pada langkah kedua.
Buka folder Gult yang udah di ekstrak tadi, cari file berekstensi .DLL dengan nama "Glut32". 

Kalau udah ketemu, copy file Glut32 tersebut, 
- Untuk windows 32-bit, kemudian klik Local Disk (C:), klik Windows, klik System32, paste file "Glut32" tersebut di situ. 
- Untuk windows 64-bit, kemudian klik Local Disk (C:), klik Windows, klik sysWOW64, paste file "Glut32" tersebut di situ.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRCh5ILCT13g5oK9eCPExG-UmaFYnJHGbBaUngGvfJNKcwwH7JS15Ng0tfn7-w7Tb5UJiojgKZWIg95qx2vJOjtMB8iqvBBi7mA4lWe5eC6MBNpwYovXpKMxFhAHAUUwMXf2WqtTOl26oT/s1600/2014-10-30+23_51_32-glut.png
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivW7CCqz0W98Fedb5wYgY_f-N022L51MGMmVLVNZdIJAdkejvfB21YLcXHrsFn1kawyoTzXODuyuxChgvaae7mMBkMAMS2bfGLoQEgCpZoByXbwO2ARJUA2ZPYhoGBQNhJNl6fXW0TTijy/s1600/2014-10-30+23_57_06-System32.png

Kalau sudah di paste file Glut32, sekarang balik lagi ke folder Glut yang sudah di ekstrak tadi. Copy header file bernama "glut". 

Kemudian klik Local Disk (C:), klik Program Files, klik CodeBlocks, klik MinGW, klik Include, klik GL.Paste file "glut" tersebut di situ.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcwuwej6FJ68QWLor9irisoJEeUCKQ0UrkEVW_wb7aHC4hB4xR_mZecTssDa9oHRfuk9F2BHWltgJuGA5CM904J77QTSeQ0MuA9JOsTSyjDMJSb2SJLVhMbXu07JwbkScsuLEhCKsVQn6B/s1600/2014-10-30+23_58_52-glut.png

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXXyfQ1PFwGoauPlEXf1S_c5pWDDj_Il0wKWqOt3u9DK-o1qisLwrFtMxshwfWD1ENvd9VCieiuMVeC3w4Zkj6pCMTCSehHV6h4wt9RfrpUymSgCK9V53ZA8BqUz8H46psnRHQlozuwI9h/s1600/2014-10-30+23_59_35-GL.png

Sekarang kita kembali lagi ke folder Glut tadi. Cari file dengan nama "libglut32.a", copy file tersebut. 

Kemudian klik Local Disk (C:), klik Program Files, klik CodeBlocks, klik MinGW, klik Lib. Paste file "libglut32.a" di situ.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFQO-Goo3tOOSTgsGHb6yUrMhC9COvWgqdvsLcuG4Dww70pASVK4JIAgO4gp2xIL_vvUUsCrNedtxTsgeSYKan6q8yuyISjPCwwjMd37jBWIvSn8Hwdn-4xHpF24j7ofTByhiyZP0LBrTr/s1600/2014-10-31+00_04_06-glut.png

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilQLUICIq8ZSmrmgdllpOnLP6zTQj_tiqgva3fpVPWHPKjZrejG9LT3W348I_BYKtmzszV6OJTtLsOpxWIU00dofUoWnDzxTS8KiVkg8BVxEPov14OEa5CeZfeCkKj6vZOuNqzuxUAen0e/s1600/2014-10-31+00_05_36-lib.png

Langkah 5.
Kalau semua langkah 4 sudah dilakukan. Buat folder baru di My Document dengan nama folder "Project".

Langkah 6.
Sekarang kita coba jalankan aplikasi CodeBlocks yang sudah kita install. Kita buat project baru dengan cara klik File, klik New, kemudian klik Project. Pilih Empty Project kemudian klik tombol Go. Terlihat sebuah kotak dialog muncul, klik Next.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRErjT-NkPf7uA0o-x09QdH4HXnlvsa7cqsg0q67II9CbFEhQzqKSR_3z5tCEL26dMY4Hdd0NUMz5VdkWs5irHQYSNHNERaWepB7DUdQ021mUCw4u9x0q3UQnISjwBKV-TtW9rp2w7sk8m/s1600/2014-10-31+00_10_02-New+from+template.png

Setelah di klik tombol Next, akan muncul kotak dialog kedua. 

Ketik nama project yang kita inginkan di bagian "Project title:", mari kita buat nama projectnya adalah "coba". 

Setelah diberi nama, kita tentukan letak kita membuat project tersebut di bagian "Folder to create project in: ". 

Klik tombol "..." kemudian pilih folder "Project" yang telah kita buat di My Document tadi.

Setelah itu klik Next.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPyKHsHDpaJZR36uFkcD5EOqXmXDjNmVymgcduzcs3j65Cbb-vJjTiE6LScC9iscwOnX6rTCkmValCPIkAp1hETFacxbJ_UEb0m-u1GIbvCFqHlGHC-PDVBZm88bSB87klhdAXnxWJv7Ub/s1600/2014-10-31+00_12_37-Empty+project.png

Maka akan muncul kotak dialog ketiga. Pastikan kita memilih "GNU GCC Compiler" pada dropdown menu "Compiler". Setelah itu klik Finish.


https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmPIAqt6MpSRThFNtvfniZ9h3ksXEM6eBV9Bda32QbWwBHXSGjPPzlNer9Dn0PON8jbWPClUyjnv88hnB6urZFBu1Mggs6Gs0c48RMeRenpJUeADkMR3xTCSvrrxE3HI84mNsEkdbdQzQM/s1600/2014-10-31+00_11_27-Empty+project.png

Langkah 7.
Sekarang lihat project yang telah kita buat tadi di jendela sebelah kiri. Klik kanan pada project coba tersebut, kemudian klik Build Option.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimbGaKwwXd6Zj0pPaCbhvkEt3pt0GLaB4TzJuxMdjcs9yGozbiZzplhluOditdM3jAiyVKpBfeingwSFVcfBgWOSRVxC-t_9HEqEFHs2rOwaSMgJQspbBcVBF8lI87Tr9GPEMu5ed_Lqtv/s1600/2014-10-31+00_48_13-E__main.cpp+%5Bcoba%5D+-+Code__Blocks+13.12.png

Kalau sudah, akan muncul sebuah kotak dialog. Klik terlebih dahulu tulisan "coba" yang berada di atas tulisan "Debug" dan "Release". 

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoOTLt7oGYGahWd4Ll9EFXsoEZY_eoYvgIFSyYKDQXZSJMtUcdMMT071-EHWV9EAkV5NfTcSKw4l_tFnPWrKcbSx6GtY4yAUmcW6049a1nhl9QiGxXPnQ0ahrWJWAQRgtDTQSAd31Zd55z/s1600/2014-10-31+00_23_43-Project+build+options.png

Kemudian klik tab dengan tulisan "Linker settings". Tekanlah tombol "Add". Ketik "opengl32" pada kotak "File:". Kemudian klik OK.

Jika berhasil akan muncul tulisan "opengl32" pada kotak Link libraries.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio9zLzyPLOevjYtpHOrWurCGu0PBEJRdysB9uqkn6JnD2IR8D8y01MzxYLBqRV0GRAmHVwwZD8F8wdfwxFdw9GuEJNwxsMFAuZhjC4NSbtzbkmV_flFAyDfAKUtPEvYuUAopY5RlHeg3lQ/s1600/2014-10-31+00_23_25-Add+library.png

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjctrGuYrfhrbtcKu-xY7_XeuronbfRggSOBNN6ftBt5ApKC5QZHxTHXkfRbQ0gEIg_eVo9SRNzyuBz2RrvhMw-ozPwoZ1wqVnnAWn59jTRkUWaoknssNe28CtwwMd2pDsP4QMs39HEpLxv/s1600/2014-10-31+00_23_55-Project+build+options.png

Sekarang kita tambahkan lagi "glu32" dan "glut32".

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVPZaZAbclNg8oRkUDJ8Lsd3xByeNYmcvl5x7Tix5gZLbb0NeTDgcujkS3bLZ3e4pN4qV_yPREE4UDhsb9p-R1VubFBymK30Zvaf3huwzwagtdnPS3bZAZhlDfXK4QLPsnZZ6fn_Teb1iE/s1600/2014-10-31+00_24_18-Add+library.png

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYV5eHz03HXFkgxWfEg-ZvZvRqmEKWhrNAfB4O-YVbQsdpZ3Ux2U3MxKBD2CxD0C0gTyDJMfCL0wNHGl_PoW-shyd4jQueI5jX2ck8LKKwd_JM065dpXcLFtSodA7fUBnXcf6hzLhfuKrN/s1600/2014-10-31+00_24_26-Add+library.png

Sehingga kini terdapat 3 link pada kotak Link libraries, yaitu opengl32, glu32 dan glut32. Kemudian klik OK.
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglMIPo3a-kFBbcpwa1YTGT33XSUqpEcEensQfBQ9VMAAs5TsvJT914royh_wsbJ0Px2yOz7kYwf7I_RlKmD495cdq3L-nmEmAO0aCgpL7NONMNanGbXCc6CylHlF_WpsjrWi0jf5AM9Ncr/s1600/2014-10-31+00_24_33-Project+build+options.png

Langkah 8.
Saatnya kita mencoba membuat program sederhana menggunakan bahasa C++ pada CodeBlocks ini.Caranya, klik File, klik New, klik Empty File. Kemudian muncul kotak dialog untuk memerintahkan kita menyimpan terlebih dahulu file yang akan kita buat. 

Klik Yes dan ketikkan nama filenya. Kali ini coba kita ketik nama filenya adalah "hello.cpp".

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3qDJeFnGbj3wCsD-KOxHsOn6cnrfOh27d4vR3KCp3NS2l1zz4eaUA3mr4vhVtxnrJdrTP9GB9kYlb8ASKl88JId3PON9x_A-3VRrW_nqcQviimQCJs-ZGnPcH51NDD4tnVzWO5KDlpgTQ/s1600/2014-10-31+00_51_47-Add+file+to+project.png



https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCUZMMzRwoBEkQ6Z-iml8DnbNAw_4EuDNJOrc3gZMnAuN6SoNItGwIQgpjGP2SoN62CNWc9PBBK2WO8mIct4VI4MuxS9B8D_HLuQolqzDmN6ZN4le18aajY0O0molKIbXhCOeV7lZNuZVr/s1600/2014-10-31+00_53_55-Save+file.png

Kemudian muncul kotak dialog Multiple Selection. Centang "Debug" dan "Release" kemudian klik OK.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYRt5jjVv-zDGywkheV77EaRXFKzHzKAZaAK61v5so_2HrDGlGjRsG6SzBBH6Y47czwOG-8c3f6AgOCsdxML6QJdFKj1iDM4TWwT4bg0Z_6EJVzVMyVOYAnrqzCBOzgiUAMRuKbr72DYb1/s1600/2014-10-31+00_52_08-Multiple+selection.png

Jika sudah berhasil. Ketik kode ini pada project "hello.cpp".

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiaiJTgkEd2VvP5yC2fB3XrCi5KZmyVjPScqfxlpWrr9G9LxjFgXaClLr3Qb9v_15rJHMWp_BEuCjxgYPxUIef17XJBn10QI0db1FEzdRnZIGmAtmOCwSNzuQDto_a5c6IMvqGOAMC6csU/s1600/2014-10-31+01_10_16-Untitled+-+Notepad.png

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKeqkdj6z39-KQk-ymddf4Tv03N9XIE5ozm73Nn3h-vXaWxEGvnI_9KNtQQ0xu45E6bKoLbTNzUohhF0RGJEcDsyZTplc-IVAu9Je2dgpOSAht4NiHXfOOXh79kqXkSPYS5RXmXeK4jk-G/s1600/2014-10-31+00_54_33-_hello.cpp+%5Bcoba%5D+-+Code__Blocks+13.12.png

Kalau sudah, kita coba running programnya. Pertama-tama kita harus Build terlebih dahulu. Caranya pilih menu Build, kemudian klik Build. Atau menggunakan keyboard shortcut, tekan CTRL+F9.

Jika tidak ada error, maka tampilannya akan seperti berikut. 


https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5C9ii8C1p7UWDnFbwWv9yXwE7N2PIYH5iqSnMHKeQ0tbG90hQ6BT08jOhVf8m2zZrwUBj2kyHIKf-WEYFWSXvsj_hQac3_DMjsbgI78ueSrOAsjFwVsjgQ1z6VzbrxYd1NltbYKH5C0SV/s1600/2014-10-31+00_54_43-_hello.cpp+%5Bcoba%5D+-+Code__Blocks+13.12.png
Kemudian klik menu Build, klik Run atau tekan tombol CTRL+F10. Dan hasilnya akan seperti di bawah ini.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH8dIzg-H1UX8glhKeX_fl3tx1ZAoORUCe_eAUjEc3ucj4a-PYSZ5J_f6c6UQWS6qNd0y4BmO70lvHH8Oz_Ns6Xz5eWTCxQWffo1Qz4AXl2fsIQp7OpgIms9JPvlvAJNEhdS_weK5aYAmX/s1600/2014-10-31+00_55_00-C__Users_User_Documents_Project_coba_bin_Debug_coba.exe.png





































Window area menggambar



Dari namanya sudah bisa ditebak bahwa itu adalah software CAD yang mengkhususkan diri pada bidang arsitektur. Karena pengkhususan bidang inilah, maka ArchiCAD menjadi software yang sangat mudah digunakan dalam perancangan arsitektur dibandingkan software CAD umum. Jadi jika Anda ingin menggambar atau merancang rumah, ada baiknya Anda mempertimbangkan untuk mempelajari dan menggunakan ArchiCAD, ada banyak kemudahan yang dapat Anda peroleh dibandingkan jika Anda menggunakan software CAD umum seperti AutoCAD, SketchUp, Solidworks dan lain-lain, karena dengan software CAD umum setiap obyek harus benar-benar dibuat dari nol, dan walaupun bisa menggunakan library, kita tetap akan disulitkan bila kita menginginkan customized object. Permasalahan itu terjawab pada ArchiCAD dengan komponen dan library-nya yang berbasis parametric object. Dengan obyek yang memiliki parameter, dengan mudah kita mengubah detail ukuran sesuai dengan kebutuhan dengan cara yang sangat mudah (bagi yang menguasai Solidworks pasti memahami arti dari parametric object). Konsep parametric object ini sangat bermanfaat ketika kita melakukan proses modifikasi desain, contohnya: apabila kita hendak menggeser posisi pintu atau mengubah ukuran jendela yang telah terpasang pada dinding, maka lubang pada dinding akan secara ostomastis  ikut bergeser dan berubah ukuran tanpa ada tambahan perintah. Tentu hal ini tidak bisa dilakukan dengan software AutoCAD dan software CAD umum lainnya.
ArchiCAD adalah software yang diciptakan oleh Grafisoft pada tahun 1982. Hingga sekarang, ArchiCAD telah mengembangkan diri secara luarbiasa sehingga software ini sangat populer di dunia arsitektur. Di Indonesia pun sudah cukup banyak pengguna ArchiCAD, indikasinya bisa di lihat dari didirikannya Grafisoft Center Indonesia (sekitar tahun 2009 – maaf kalau salah), yang mana kegiatannya difokuskan pada pelatihan (sertifikasi internasional!) dan bekerjasama dengan berbagai perguruan tinggi Indonesia dalam penggunaan ArchiCAD (kalau di Bandung mereka bekerjasama dengan ITENAS dan UNLA – sekali lagi, maaf kalau salah, saya cuma baca di internet J ). Komunitas dunia maya ArchiCAD di Indonesia pun sudah mulai bermunculan dan cukup ramai (sayang saya bukan arsitek, jadi ngga pede mau ikutan komunitas-komunitas ini, kan malu J). Release terakhir dari ArchiCAD adalah versi 14 (tahun 2010).
Kelebihan ArchiCAD dibanding Software CAD lain:
1. Cukup mudah dipelajari, buku-bukunya sudah banyak beredar, pelatihan formal sudah tersedia, komunitas untuk berbagi ilmu sudah cukup banyak. Silahkan download tutorial dibawah ini :
2. Untuk kemudahan proses penggambaran, setiap lantai dipisahkan per layer secara otomatis.
https://sujanayogi.files.wordpress.com/2010/07/1st-floor1.jpg?w=500
https://sujanayogi.files.wordpress.com/2010/07/2nd-floor.jpg?w=500
3. Gambar yang dihasilkan berupa dua output (window), 2D (pandangan atas) dan 3D (interaktif), di mana kedua output itu aktif secara bersamaan dan saling terhubung, artinya kita bisa membuat gambar pada window manapun, dan masing-masing window yang lain akan saling meng-update satu sama lain secara otomatis.
https://sujanayogi.files.wordpress.com/2010/07/3d-view.jpg?w=500
4. Untuk presentasi, tersedia fasilitas render dengan kualitas yang sangat baik, dengan output berupa image atau movie. Untuk mendapatkan hasil yang lebih baik, Grafisoft telah mengeluarkan software renderer khusus yaitu Artlantis yang bisa me-render berbagai format gambar (tidak cuma gambar keluaran ArchiCAD). Software ini juga dilengkapi dengan fasilitas flytrough, yaitu fasilitas untuk membuat animasi pasif (obyeknya diam, kamera yang bergerak) dari gambar yang telah kita buat
https://sujanayogi.files.wordpress.com/2010/07/showroom-22.jpg?w=500
https://sujanayogi.files.wordpress.com/2010/07/showroom-31.jpg?w=500
https://sujanayogi.files.wordpress.com/2010/07/showroom-41.jpg?w=500
https://sujanayogi.files.wordpress.com/2010/07/showroom-51.jpg?w=500
5. Obyek yang dilengkapi dengan parameter ukuran yang sangat detail, memudahkan kita mendapatkan obyek dengan ukuran yang benar-benar flexibel.
6. Dilengkapi dengan fasilitas penghitungan Bill Of Material atau RAB, yang kata orang formatnya cukup bagus dan bisa diterima para arsitek atau kontraktor kita, saya kurang tahu pasti, belum sempat belajar🙂
7. Satu lagi yang lebih keren : Fasilitas GDL. Kependekan dari Geometric Description Language, yaitu pembuatan obyek dengan menggunakan script bahasa pemrograman, mirip kita dulu menggambar obyek dengan program Pascal atau bahasa C, hanya saja bahasa GDL jauh lebih sederhana. Mengapa dibilang keren? Karena dengan obyek yang didefinisikan dengan bahasa program, ukuran file menjadi sangat kecil, karena hanya memuat teks saja, oleh karenanya akan sangat mudah untuk disebarluaskan. Sangat berbeda bila kita mau share obyek yang kita gambar menggunakan software AutoCad misalnya, tentu repot kalau kita hendak mengunggah obyek mobil dengan bentuk yang rumit dalam format *.dwg/dxf, karena file-nya akan sangat besar. Konsepnya sama persis dengan konsep penggambaran obyek menggunakan software PDMS (software khusus untuk mendesain platform kilang pengeboran minyak), yang keluaran hasil gambarnya juga berupa teks dengan extension file *.txt atau *.mac.











KOMPONEN – KOMPONEN OPEN GL


PENJELASAN TETANG OPENGL DAN DIRECTX

http://elchapuzasinformatico.com/wp-content/uploads/2014/02/directx-vs-opengl.jpg

OPENGL:
OpenGL (Open Graphic Library) merupakan library yang terdiri dari berbagai macam fungsi dan biasanya digunakan untuk menggambar sebuah atau beberapa objek 2 dimensi dan 3 dimensi. Library-library ini mendefinisikan sebuah cross-bahasa, cross-platform API (antarmuka pemrograman aplikasi) untuk menulis aplikasi yang menghasilkan komputer 2D dan 3D grafis. Bahasa pemrograman yang digunakan pada umumnya adalah pemrograman C/C++, namun dapat pula menggunakan Java. OpenGL merupakan library yang digunakan untuk melakukan pemrograman grafik; Graphic Programming. Untuk mempelajari pemrograman grafik ini, diharapkan kita dapat menguasai persamaan matematika, terutama operasi matriks. Karena, di dalam melakukan pemrograman grafik, akan dihadapkan mengenai pembuatan shading, shape, transform (rotate, translation, scala).OpenGL dikembangkan oleh Silicon Graphich Inc pada tahun 1992 dan digunakan dalam CAD, virtual reality, visualisasi ilmiah, visualisasi informasi, dan simulasi penerbangan. Dalam industri game, OpenGL juga sangat berperan dalam hal grafik. Pesaingnya adalah DirectX atau Direct3D yang berjalan di platform Microsoft Windows.

DIRECTX:
Teknologi ini kali pertama diperkenalkan pada tahun 1995 dan menjadi standar untuk pengembangan aplikasi multimedia pada platform Windows.Secara mendasar, DirectX merupakan interface antara hardware dalam PC Anda dan Windows itu sendiri, yang merupakan bagian dari Windows API (Application Programming Interface). Misalnya, jika developer game ingin memutar file suara, developer tersebut hanya tinggal menggunakan fungsi library yang sesuai. Saat game running, sistem akan memanggil DirectX API yang akan memutar file suara. Developer game tidak perlu tahu jenis sound card apa yang dihadapi, apa yang dapat dilakukannya, atau bagaimana berbicara kepadanya. Microsoft telah menyediakan DirectX, dan untuk para pengembang sound card, mereka telah menyediakan driver yang berkemampuan DirectX. Dari sisi gamer sendiri, DirectX juga memberikan kemudahan yang besar, misalnya saja kita tidak perlu melakukan konfigurasi yang rumit.Pada awalnya, DirectX hanyalah toolkit sederhana: hardware masa awal terbatas dan pada waktu itu hanya dibutuhkan fungsi grafis yang sederhana. Seiring dengan perkembangan hardware dan software yang semakin kompleks, demikian juga DirectX. Ia sekarang lebih dari sekadar toolkit grafis, dan ia telah mencover semua jenis komunikasi hardware.
Jika dilihat secara kompleks Komponen-komponen DirectX terdiri dari:

1. DirectX Graphics, terdiri dari beberapa APIs:
* DirectDraw: Untuk menggambar grafik 2D (raster graphics). Sekarang tidak
disarankan (karena adanya Direct2D), meskipun masih digunakan sedikit
game dan sebagai video renderer di media aplikasi.
* Direct3D (D3D): Untuk menggambar Grafik 3D.
* DXGI: untuk menghitung penyesuaian dan pengawasan, dan mengatur
rangkaian pertukaran untuk Direct3D 10 keatas.
2. DirectInput: Untuk menangani alat masukan termasuk keyboard, mouse,
joystick, atau game controllers. Tidak disarankan setelah versi 8 karena
adanya XInput untuk Xbox 360 kontroler atau WM INPUT untuk keyboard dan
mouse.
3. DirectPlay: Untuk komunikasi koneksi area lokal atau area luas. Tidak
disarankan setelah versi 8.
4. DirectSound: Untuk putar balik dan merekam gelombang suara.
* DirectSound3D (DS3D): Untuk putar balik suara 3D.
5. DirectMusic: Untuk putar balik rekaman suara yang disahkan di DirectMusic
Producer.
6. DirectX Media: terdiri dari DirectAnimation untuk 2D/3D animasi web,
DirectShow (Tidak disarankan sebentar lagi oleh Media Foundation) untuk
multimedia putarbalik dan streaming media, DirectX Transform untuk
interaksi web, dan Direct3D Retained Mode untuk grafik 3D tingkat tinggi.
DirectShow terkandung DirectX plugin untuk pemroses sinyal audio dan
DirectX Video Acceleration untuk video terakselerasi. Sejak Tahun 2005
DirectShow tidak termasuk dalam DirectX API. DirectShow dimasukan dalam
paket Windows SDK.
7. DirectX Media Objects: mendukung streaming seperti Encode, Decode, dan
Effect.
8. DirectSetup: untuk memasang komponen DirectX.














Primitive Drawing
             Sistem Koordinat 2 Dimensi

             Menggambar Titik

             Menggambar Garis

             Menggambar Polyline

             Menggambar Polygon

Sistem koordinat 2 dimensi


Pemahaman tentang koordinat dalam autocad sangatlah penting. Karena koordinat merupakan titik atau acuan dasar dalam menggambar suatu obyek.
Dalam Autocad, Ada 2 jenis koordinat, yaitu koordinat kartesius dan koordinat polar. Dan dari 2 jenis koordinat tsb, masing-masing dibagi lagi dalam 2 metode koordinat, yaitu Absolut dan Relatif. Perbedaan antara Absolut dan Relatif terletak pada acuan dalam membuat titik (koordinat).
Absolut (mutlak) jika kita mengacu pada sumbu asal koordinat (X,Y) dg nilai asal (0,0).
Relatif jika kita mengacu pada titik koordinat terakhir yang kita buat, dengan penulisan di awali karakter @ kemudian nilai koordinat X,Y

Koordinat Kartesius
Koordinat standard dalam autocad di tuliskan dengan dua angka yang di pisahkan tanda koma, dua angka tsb merupakan nilai dari jarak posisi titik terhadap sumbu X,Y. Pada gambar di atas https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTPOh6jVLhTPc73MLNo8CxHoixEDilPAxZ5iYYofkIFr1KTo6DCTisWvXOQoPFNz4WZVeWmAWYFBp9lMlAGi_KWsdDZ4li_W5EwlQ3j8wpQmHPICY5O5yEoFN-btbsgadjr87nL0pHJfDw/s400/ko2.bmpdi jelaskan angka 56.75 disebut sebagai X koordinat, karena nilai di ukur sepanjang sumbu X. Sedang angka 76.60 di sebut sebagai Y koordinat karena nilai di ukur sepanjang sumbu Y. Dalam sistem koordinat sumbu X dan Y menyilang di titik 0.0. Ini merupakan titik asal sebagai titik acuan (untuk sistem absolut). Nilai-nilai X koordinat akan negatif jika berada di sebelah kiri sumbu Y dan Y koordinat akan bernilai negatif jika berada di bawah sumbu X. Dalam ilustrasi gambar di samping, semua koordinat nilai, (baik X dan Y) yang negatif di bawah sebelah kiri merupakan kuadrant negatif. Sedangkan pada atas kanan merupakan kuadrant positif. Dalam pengoperasian autocad kebanyakan orang bekerja dalam kuadrant positif, hal ini di sebabkan karena kemudahan tanpa memikirkan nilai negatif.

Koordinat Polarhttps://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL8iycDGD0JUWjb0ClSBnlyNmFBsKhtatTcwPemsmGp_BGhyphenhyphenYBlqA0D6rZQwIvaVtq2caHwYL5i-MsydEw85M9lbnDxkr8a5wz02KHEaCDnHiK7vvPMvywXQ4DGFpc-VANStSkiaxfdAOY/s400/ko3.bmp
Koordinat Polar prinsipnya juga sama seperti koordinat kartesius yaitu bertujuan untuk menentukan posisi suatu titik. Namun pada polar koordinat penentuan titik tersebut di dasarkan pada suatu komponen jarak dan sudut. Jarak dan sudut pengukuran di buat relatif terhadap titik asal. Dalam ilustrasi gambar di samping, diperlihatkan metode penulisan koordinat polar. 66.2<60 dimana angka pertama merupakan jarak (dalam satuan unit) dan yang kedua adalah sudut. Dalam autocad, untuk nilai sudut positif akan berlawanan arah jarum jam (lihat warna hijau), dan untuk nilai sudut negatif akan searah jarum jam (warna merah).

Penulisan Koordinat Absolut dan Relatif
Kedua koordinat, kartesius maupun polar mempunyai dua jenis, absolut dan relatif. Koordinat absolut berhubungan atau mengacu pada titik asal sistem koordinat 0.0 pada sumbu X dan Y, sedang koordinat relatif mengacu pada titik terakhir yang kita buat. Untuk koordinat absolut dapat dilihat pada contoh di atas, sedang untuk menentukan koordinat relatif kita perlu menambahkan karakter @ sebagai simbul awalan. Sebagai contoh penulisan untuk koordinat kartesius relatif seperti ini @56.75,76.60 dan koordinat polar relatif seperti ini @56.75<30.>

Command: LINE
Specify first point: 30,40 (koordinat kartesius absolut)
Specify next point or [Undo]: @0,12 (koordinat kartesius relatif)
Specify next point or [Undo]: @12<0>
Specify next point or [Undo]: @0,-12 (koordinat kartesius relatif lainya)
Specify next point or [Close/Undo]: C (untuk menutup)


Coba lakukan langkah-langkah di atas, dan lihat persegi yang terbentuk dengan nilai-nilai koordinat tersebut. Selain langkah di atas, anda juga dapat menggunakan metode berikut untuk menggambar persegi yang sudah di ketahui ukuranya. Sebagai contoh akan di buat persegi dengan ukuran panjang 20 unit dan lebar 10 unit.

Command: Rectangle
Specify first corner point or [Chamfer/Elevation/Fillet/Thickness/Width]: klik di sembarang tempat
Specify other corner point or [Area/Dimensions/Rotation]: @20,10


Sebagai catatan bahwa koordinat relatif X menentukan ukuran panjang persegi, sedang koordinat relatif Y menentukan ukuran lebar persegi.

Status Bar
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcisLjz6ZMDjQeCCwU9xe-IAThlLMuYY_Ha5Mp5lUgx0IqAVW0BguqU3lANIbI4YyZnCLsYfU3YId4e8scj75U1zbGVUhdxZGn0SYEIZfjK3-yze9dkeHqJ6Bi5rgWyaJjsWEq4KCC7pOn/s400/ko4.bmpStatus bar di bagian bawah jendela AutoCad selalu menunjukan koordinat titik kursor. Jadi anda bisa melihat nilai koordinat di seluruh area gambar dengan menggerakkan mouse dan melihat angka pada status bar.



TITIK

2.       MENGGAMBAR TITIK
a.   glVertex2i(x,y)
Untuk menggambar titik diposisi(x,y) dimana x dan y didefinisikan sebagai bilangan bulat(integer)

b.  glVertex2f(x,y)
glVertex2d(x,y)
Untuk menggambar titik diposisi(x,y) dimana x dan y didefinisikan sebagai bilangan pecahan(float/double)
Menggunakan library glBegin(GL_POINTS)

2.1  CONTOH MENGGAMBAR TITIK

a. glBegin(GL_POINTS);
glVertex2i(100,50);
glVertex2i(100,130);                              
glVertex2i(150,130);
glEnd();
b. drawDot(100,50);
drawDot(100,130);
drawDot(150,130);









2.2  FUNGSI UNTUK MENGGAMBAR TITIK

a. void drawDot(intx, inty)
{ glBegin(GL_POINTS);
glVertex2i(x,y);
glEnd();
}
Fungsi ini digunakan bila x dan y didefinisikan sebagai integer

b. void drawDot(floatx, float y)
{ glBegin(GL_POINTS);
glVertex2f(x,y);
glEnd();
}
Fungsi ini digunakan bila x dan y didefinisikan sebagai float

2.3  MENGUBAH UKURAN TITK
a. drawDot(100,50);
drawDot(100,130);
glPointSize(4);
drawDot(150,130);









GARIS

  MENGGAMBAR GARIS

Untuk membuat garis diperlukan library GL_LINES dengan menyatakan titik awal dan titik akhir dari garis.
a. glBegin(GL_LINES);
glVertex2f(100,100);
glVertex2f(200,150);
glEnd();






3.1  FUNGSI UNTUK MENGGAMBAR GARIS
a. void drawLine(intx1,int y1,int x2,int y2)
{   glBegin(GL_LINES);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glEnd();
}

b. void drawLine(floatx1,float y1,float x2,float y2)
{   glBegin(GL_LINES);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glEnd();
}

3.2  CONTOH MENGGAMBAR GARIS

a. drawLine(100,100,200,150);







POLYLINE 


Polyline adalah sekumpulan garis yang terhubung satu dengan yang lainnya hingga membentuk sebuah obyek gambar

a. glBegin(GL_LINE_STRIP);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glVertex2f(x3,y3);
……………………………………………
glVertex2f(xn,yn);
glEnd();
   

4.1  CONTOH MENGGAMBAR POLYLINE
a. glBegin(GL_LINE_STRIP);
glVertex2f(100,100);
glVertex2f(200,150);

glVertex2f(300,50);
glEnd();







POLYGON

MENGGAMBAR POLYGON

Polygon adalah sekumpulan garis yang terhubung satu dengan yang lainnya dan berbentuk kurva tertutup hingga membentuk sebuah obyek gambar.

a. glBegin(GL_LINE_LOOP);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glVertex2f(x3,y3);
……………………………………………
glVertex2f(xn,yn);
glEnd();

5.1  CONTOH MENGGAMBAR POLYGON
a. glBegin(GL_LINE_LOOP);
glVertex2f(100,100);
glVertex2f(200,150);
glVertex2f(300,50);
glEnd();



































K4.MEMAHAMI GRAFIK 2 DIMENSI


Objek Grafik 2 Dimensi

Objek grafik 2 dimensi adalah sekumpulan titik-titik 2 dimensi yang dihubungkan dengan garis lurus, baik berupa polyline, polygon atau kurva. Objek grafik 2 dimensi didefinisikan sebagai kumpulan titik 2dimensi yang secara komputasi dinyatakan sebagai array 1D, atau linkedlist sesuai dengan struktur data yang digunakan dalam menyatakan kumpulan titik 2D ini. 
Objek grafik dimensi juga adalah gambar 2 dimensi yang  sumbu x dan sumbu y, atau sumbu koordinat cartesius dua dimensi. Dua sumbu yang saling bertegak lurus antar satu dengan yang lain, yang keduanya terletak dalam satu bidang (bidang xy).

Sedangkan Grafik komputer 2D adalah sebuah generasi gambar digital berbasis komputer, yang kebanyakan mengambil objek-objek dua dimensi (2D). Model Grafik 2D merupakan kombinasi dari model geometri (juga disebut sebagai grafik vektor), gambar digital (raster graphics), fungsi matematika, dan sebagainya. Komponen-komponen ini dapat dimodifikasi dan dimanipulasi oleh transformasi geometri dua dimensi, seperti translasi, rotasi, dan dilatasi. 

Model-model yang digunakan pada disain grafis 2D biasanya tidak mendukung bentuk-bentuk tiga-dimensi, atau fenomena yang bersifat tiga dimensi, seperti pencahayaan, bayangan, pantulan, refraksi, dan sebagainya. Namun demikian, mereka dapat membuat model berlapis-lapis (layer); nyata, translusen, dan transparan, yang dapat ditumpuk dalam urutan tertentu. Urutan tersebut biasanya didefinisikan dengan angka (kedalaman lapisan, atau jarak dari si penglihat).

Macam-Macam objek 2D :
  • Line
  • Circle
  • Arc
  • Polygon
  • Text
  • Section
  • Rectangle
  • Ellips
  • Donut
  • Star
  • Helix

Dari macam-macam objek 2d ini saya akan membahas 3 macam:

Circle
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm5j5-0lof92bSyeBiqTvWFEHC7-JXB6XdfCLZXHu8-gX81b1Ocduc-ODXyQlcYyn16Wc2WmvmwlIZx6pMWjMNEvCEt5OvKHneOqO3Gh2ba3LgaeJAxwpU0iHXSWVcwu_KCArImb4fY8g/s200/Transmutation_circle_Template_by_Notshurly.jpg



Circle atau lingkaran adalah object 2 dimensi yang memiliki ukuran diameter dan jari-jari. Circle atau lingkaran merupakan kumpulan titik-titik yang tak berhingga dan saling berhubung.





Line

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI87jddkAJaccFB4V14xxCLkzXWOTt5rW6JkKUOIzk2u6IJNwmuoPqL7yepih3wj75ChlNn__2RP3zsGNHziNm7cpm6joCBLYHqIV0wpRQxwEwUVqWwZiQ5EF-66eD3A4qM7csJVaYJrw/s200/straight-lines-6.png

Objek line/garis adalah objek salah satu 2 dimensi yang sangat mendasar dan sering digunakan untuk perancangan gambar kerja. Line berasal dari 2 titik yang saling terhubung.




Polygon

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVN_2nUEUqut__wRxDQ-ySYJ9YpM-kK2GfrSYJrkH5Ffs9khjNXgaPWCTjJWsixTnVIhrBiH8aDGQ-BX2qd9wZq_UGUS4RAUmMFOVLSrYA3KCn7b1q-xK8j8LnfCkMQ2HBdNwy-2y1y24/s200/polygon-shapes-regular-polygons-1-col.gif

Polygon adalah suatu fungsi yang mirip dengan polyline, hanya sajahasilnya adalah kurva tertutup. Pada polygon digunakan konsep array dalam menyatakan objek 2D sebagaikumpulan titik 2D. Polygon digunakan untuk merepresentasikan objek-objek duadimensi.




WARNA OBJEK GRAFIK 2 DIMENSI


Color
Untuk memberi warna pada objek, seperti titik atau garis, dapat dilakukan dengan menggunakan fungsi à glColor3f(red,green,blue);
Di mana red, green, blue berada pada 0 sampai dengan 1, yang menunjukkan skala pencerahan dari masing-masing skala.
beberapa fungsi color :
1.      glColor3f(0,0,0);//black
2.      glColor3f(0,0,1);//blue
3.      glColor3f(0,1,0);//green
4.      glColor3f(0,1,1)//cyan
5.      glColor3f(1,0,0)//red
6.      glColor3f(1,0,1)//magenta
7.      glColor3f(1,1,0);//yellow
8.      glColor3f(1,1,1);//white


MEMBUAT OBJEK 2 DIMENSI


· Membuat langit
           point2D_t langit[4]={{0,0},{400,0},{400,300},{0,300}};
           color_t wLangit[4]={{0,1,1},{0,1,1},{0,1,0},{0,1,1}};
           gradatePolygon(langit,wLangit,4);
·         Program ini untuk membuat objek lingkaran
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();
 }
·         Membuat matahari
           glColor3f(1,1,0);
           lingkaran(35,200,320,240);
·         Membuat awan
glColor3f(1,1,1);
           lingkaran(20, 200, 40, 218);
           glColor3f(1,1,1);
           lingkaran(25, 200, 82, 234);
           glColor3f(1,1,1);
           lingkaran(19, 200, 120, 220);
           glColor3f(1,1,1);
           lingkaran(20, 200, 82, 209);
           glColor3f(1,1,1);
           lingkaran(15,200, 60, 233);
           glColor3f(1,1,1);
           lingkaran(13, 200, 55, 209);
           glColor3f(1,1,1);
           lingkaran(14, 200, 107, 228);
           glColor3f(1,1,1);
           lingkaran(14, 200, 107, 210);
·         Membuat laut dan pantai
           point2D_t laut[5]={{0,0},{400,0},{400,55},{300,45},{0,50}};
           color_t wLaut[5]={{0.1,0.5,0.7},{0.5,0.2,0},{0.5,0.2,0},{0,0,1},{0.1,0.5,0.7}};
           gradatePolygon(laut,wLaut,5);
·         Membuat perahu
//Membuat perahu
             point2D_t perahu[4]={{43,45},{110,45},{123,80},{28,80}};
             color_t wPerahu[4]={{0,0,0},{0,0,0},{0.5,0.2,0},{0.5,0.2,0}};
             gradatePolygon(perahu,wPerahu,4);
//membuat tiang
             point2D_t tiang[4]={{65,80},{67,80},{67,120},{65,120}};
             color_t wTiang[4]={{0,0,0},{0,0,0},{0,0,0},{0,0,0}};
             gradatePolygon(tiang,wTiang,4);
//membuat bendera merah
           point2D_t merah[4]={{67,115},{80,115},{80,120},{67,120}};
           color_t wMerah [4]={{1,0,0},{1,0,0},{1,0,0},{1,0,0}};
           gradatePolygon(merah,wMerah,4);
//membuat bendera putih
            point2D_t putih[4]={{67,110},{80,110},{80,115},{67,115}};
           color_t wPutih [4]={{1,1,1},{1,1,1},{1,1,1},{1,1,1}};
           gradatePolygon(putih,wPutih,4);
·         Membuat objek rumput laut bergerak
Sebelum menampilakan source code dari rumput, kita harus memasukan struktur datanya terlebuh dahulu
typedef struct {
point2D_t p,p0;
float d,s;
float xa, xb;
} obyek_t;

// Mengacak Posisi awal rumput
    static obyek_t rumput[200];{
    static int tick=0;
    int i;

    if(tick==0){
    for(i=0;i<300;i++){
    rumput[i].p.x=rand()%100;
    rumput[i].p.y=10+rand()%6;
    rumput[i].d=rand()%8+2;
    rumput[i].s=float(rand()%100+1)/500;
    rumput[i].p0=rumput[i].p;
    }
    }
    tick++;
    // Menggoyangkan rumput
    float xa,xb;
    for(i=0;i<700;i++){
    rumput[i].p.x+=rumput[i].s;
    xa=rumput[i].p0.x-5*rumput[i].d;
    xb=rumput[i].p0.x+5*rumput[i].d;
    if((rumput[i].p.x<xa) || (rumput[i].p.x>xb))
    rumput[i].s=-rumput[i].s;
    }

    // Menggambar rumput
    point2D_t p[3];
    color_t cp[3]={{0.1,1,0.3},{0,0.2,0},{0,0.2,0}};
    for(i=0;i<80;i++){
    p[0].x=rumput[i].p.x;
    p[0].y=rumput[i].p.y;
    p[1].x=rumput[i].p0.x-rumput[i].d;
    p[1].y=0;
    p[2].x=rumput[i].p0.x+rumput[i].d;
    p[2].y=0;
    gradatePolygon(p,cp,3);
    }
    }

·         Membuat efek air
           float xp,yp,dx;
           setColor(1,1,1);
           for(int i=1;i<20;i++){
           xp=250*(float)rand()/RAND_MAX-10;
        yp=55*(float)rand()/RAND_MAX-10;
        dx=10+20*(float)rand()/RAND_MAX;
        drawLine(xp,yp,xp+dx,yp); 
 }






3.2.       Tampilan Objek
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPHkMW_ATon7rUhyYXK4M0YM_RjCV-RF7IHaU9HspATAd6VNSk0IsxDe_wHFPVUvIfizuA4X_43enxScucuInZmSd246qEf-4qlzquuqactG7TZuHwgUq08KleqbTNWoJ1tpAa4T7rbiM/s1600/kapal.png


MEMBUAT STRUKTUR DATA OBJEK 2 DIMENSI



Untuk membuat menjadi struktur data, kita harus melakukan dulu aktivitas terhadap objek data, yaitu :
v  Mendeskkripsikan kumpulan operasi sah yang diterapkan ke elemen-elemen objek data.
v  Menunjukan mekanisme kerja operasi-operasi.
Objek data integer ditambah operasi (+ , - , * , / , mod ,cell , floor , < , >) dan operasi-operasi lain yang memanipuasi objek data integer menyatakan struktur data.
Struktur data = Objek data + { Operasi manipulasi }.
Tahap pembuatan struktur data adalah :
Ø   Tahap pertama : Spesifikasi
Pendeskripsian / spesifikasi struktur data menyatakan apa yang dapat dilakukan struktur data, bukan cara penerapannya.

Spesifikasi dapat dilakukan dengan dua cara, yaitu :
·         Spesifikasi secara formal
·         Spesifikasi secara informal
Ø  Tahap kedua : Implementasi
Implementasi menyatakan cara penerapan struktur data dengan struktur data yang telah ada.Implementasi struktur data adalah proses pendefinisian tipe data abstrak sehingga semua operasi dapat dieksekusi computer. Implementasi struktur penyinpanan item-item data serta algoritma-algoritma untuk implementasi operasi-operasi sehingga menjamin terpenuhinya karakteristik struktur data, relasi item-item data atau invariant pada struktur data itu.
Ø  Tahap ketiga : Pemrograman
Pemrograman terstruktur adalah penerjemahan menjadi pernyataan di bahasa pemrograman tertentu. Prosesnya terdiri dari :
·         Deklarasi yang mendefinisikan objek-objek data dan hubungannya…
·         Pembuatan prosedur / rutin untuk operasi-operasi dasar yang menjaga invariant pada struktur data itu .
Sesuai dengan relasi yang didefinisikan di spesifikasi perancangan harus memilih tipe-tipe data yang telah ada untuk merepresentasikan struktur data.
Struktur data di bangun menggunakan fasilitas pembentukan atau pembuatan struktur data yang disediakan bahasa seperti array, record, dan sebagainya atau yang telah di buat seperti stack, queue, atau himpunan menggunakan linked list.
Pembuatan struktur data adalah pembentukan tipe data lengkap yang mempunyai empat property berikut :
1.      Nama         : Identifier tipe data
2.      Domain     : Domain / himpunan semesta nilai di tipe data
3.      Konstanta (penyebutan anggota-anggotanya) : Cara penyebutan anggota-anggota tipe data
4.      Operasi-operasi terhadap tipe data itu (operator)       : Daftar operasi terhadap anggota tipe data sehingga kelakuan objek data sesuai spesifikasi.

C.    ARRAY
2.1  Pengertian Array
Array atau larik didefinisikan sebagai pemesanan alokasi memory berurutan.definisi ini kurang tepat, karena terjadi kerancuan antara struktur data dan representasinya.Memang benar array hampir selalu di implementasikan menggunakan memory berurutan tapi tidak selalu demikian.
Semua elemem array bertipe sama. Array cocok untuk organisasi kumpulan data homogen yang ukuran atau jumlah elemen maksimumnya telah diketahui dari awal.
Homogen adalah bahwa setiap elemen dari sebuah array tertentu haruslah mempunyai tipe data yang sama.
2.2  Karakteristik Array
a)      Mepunyai batasan dari pemesanan alokasi memori (bersifat statis)
b)      Mempunyai tipe data sama (bersifat homogen)
c)      Dapat diakses secara acak.
2.3 Deklarasi Array
Ada tiga hal yang harus di ketahui dalam mendeklarasikan array, yaitu :
a)      Type data array
b)      Nama variable array
c)      Subkrip / index array.
Contoh deklarasi dari array adalah sebagai berikut :
int A[5] ; artinya variabel A adalah kumpulan data sebanyak 5 bilangan bertipe
integer.
2.4  Jenis Array
1.      Array Dimensi Satu
Deklarasi : Type_Data Nama_Variabel [index]
n
p(Index Array)
i = 1



Rumus untuk menentukan jumlah elemen dalam array adalah :


p = Perkalian dari index sebelumnya (untuk arraybdimensi dua dan tiga).
Pemetaan (Mapping) Array Dimensi Satu Ke Storage
Rumus             :  @A[i] = B + (i – 1) * L
Dimana            :  @A[i]           :  Posisi array yang dicari
                                    B         :  Posisi awal index di memori computer
                                    i           :  Subkrip atau index array yang di cari
                                    L          :  Ukuran atau besar memori suatu tipe data

2.      Array Dimensi Dua
Deklarasi   : Type_Data Nama_Variabel [index1] [index2]
n
p(Index Array)
i = 1



            Menentukan jumlah elemen dalam array dimensi dua :


p = Perkalian dari statemen sebelumnya
Pemetaan (Mapping) Array Dimensi Dua Ke Storage
Terbagi dua cara pandang (representasi) yang berbeda :
·         Secara kolom per kolom (coloumn major order / CMO)



@M[i][j] = M[0][0] + {(j – 1) * K + (i – 1)} * L

 
·         Secara baris per baris (row major order / RMO)



@M[i][j] = M[0][0] + {(i – 1) * N + (j – 1)} * L

 
Keterangan      :
@M[i][j] = Posisi array yang di cari, M[0][0 = Posisi alamat awal index array, i = Baris, j = Kolom, L = Ukuran memory type data, K = Banyaknya elemen per kolom, N = Banyaknya elemen per baris.
3.      Array Dimensi Tiga
Deklarasi   : type_Data Nama_Variabel [index1][index2][index3]
n
p(Index Array)
i = 1



Menentukan jumlah elemen dalam array dimensi tiga :


p = Perkalian dari statemen sebelumnya
Pemetaan (Mapping) Array Dimensi Tiga Ke Storage



Rumus : @M[n][m][p] = M[0][0][0] + {((n – 1) *(index1)) + ((m – 1) *    (index2))+ ((p – 1) * (index3)} * L

 

TRIANGULAR ARRAY (ARRAY SEGI TIGA)
Triangular array dapat merupakan Upper Triangular (seluruh elemen di bawah diagonal utama = 0), ataupun Lower Triangular (seluruh elemen di atas diagonal utama = 0).
N
          I = N (N+1)/2
I = 1


Dalam array Lower Triangular dengan N baris, jumlah maksimum elemen <> 0, tidak lebih dari  


SPERSE ARRAY (ARRAY JARANG)
Suatu array yang sangat banyak elemen nol-nya.
2.5 Operasi Dasar Pada Array
Operasi terhadap elemen di array dilakukan dengan pengaksesan langsung. Nilaidi masing-masing posisi elemen dapat diambil dan nilai dapat disimpan tanpa melewati
posisi-posisi lain.
Terdapat dua tipe operasi, yaitu :
1. Operasi terhadap satu elemen / posisi dari array
2. Operasi terhadap array sebagai keseluruhan
Dua operasi paling dasar terhadap satu elemen / posisi adalah
1. Penyimpanan nilai elemen ke posisi tertentu di array
2. Pengambilan nilai elemen dari posisi tertentu di array
Operasi-operasi dasar terhadap array secara keseluruhan adalah :
1. Operasi penciptaan
2. Operasi penghancuran
3. Oparasi pemrosesan traversal
4. Operasi pencarian (table look-up)
5. Operasi sorting
2.6 Penciptaan Dan Penghancuran
Operasi penciptaan biasa disebut inisialisasi.Operasi ini untuk mempersiapkan struktur data untuk operasi-operasi berikutnya.Operasi penghancuran menyatakan ketidak berlakuan struktur data atau membebaskan memory, menyerahkan memory ke manajemen memory agar dapat di pergunakan keperluan lain.Operasi penghancuran penting terutama bila struktur data di implementasikan secara dinamis menggunakan pointer
2.7  Penyimpanan Dan Pengambilan Nilai
Biasanya bahasa pemrograman menyediakan sintaks tertentu untuk penyimpanan dan pengambilan nilai elemen pada posisi tertentu di array.
Contoh :
A[10] = 78, berarti penyimpanan nilai 78 ke posisi ke-10 dari array A
C = A[10], berarti pengambilan nilai elemen posisi ke-10 dari array A
2.8  Pemrosesan Transversal
Operasi pemrosesan transversal adalah pemrosesan mengolah seluruh elemen secara sistematik.
2.9  Pencarian Di Array (Table Look-Up)
Pencarian di array (table look-up) adalah proses pencarian suatu nilai di array. Klasifikasi pencarian di array adalah :
1)      Pencarian sekuen (sequential searching),yaitu:
a.       Tanpa Boolean, terbagi:
·         Tanpa sentinen
·         Dengan sentinen
b.      Menggunakan boolean
2)      Pencarian secara biner / dikotom (binary = dichotomy searching).
2.10 Pengurutan Array
Pengurutan atau sorting adalah proses yang paling sering di lakukan dalam pengolahan data.pengurutan di bedakan menjadi dua, yaitu :
  1. Pengurutan internal
Pengurutan dilakukan terhadap sekumpulan data di media memory internal komputer dimana data dapat di akses elemennya secara langsung.
  1. Pengurutan eksternal
Pengurutan data di memory sekunder.Biasanya data bervolume besar sehingga tidak mampu dimuat semuanya di memori utama.
2.11 Keunggulan Dan Kelemahan Array
Ø  Keunggulan array adalah sebagai berikut :
  1. Array sangat cocok untuk pengaksesan acak. Sembarang elemen di array dapat diacu secara langsung tanpa melalui elemen-elemen lain.
  2. Jika berada di suatu lokasi elemen, maka sangat mudah menelusuri ke elemen-elemen tetangga, baik elemen pendahulu atau elemen penerus 3
  3. Jika elemen-elemen array adalah nilai-nilai independen dan seluruhnya harus terjaga,maka penggunaan penyimpanannya sangat efisien.
Ø  Kelemahan array adalah sebagai berikut :
Array mempunyai fleksibilitas rendah, sehingga tidak cocok untuk berbagai aplikasi  karena array mempunyai batasan sebagai berikut :
  1. Array harus bertipe homogen. Kita tidak dapat mempunyai array dimana satu elemenadalah karakter, elemen lain bilangan, dan elemen lain adalah tipe-tipe lain
  2. Kebanyakan bahasa pemrograman mengimplementasikan array statik yang sulitdiubah ukurannya di waktu eksekusi. Bila penambahan dan pengurangan terjaditerus-menerus, maka representasi statis
• Tidak efisien dalam penggunaan memori
• Menyiakan banyak waktu komputasi
• Pada suatu aplikasi, representasi statis tidak dimungkinkan
Bila penambahan dan pengurangan terjadi terus menerus, maka representasi statis (array):
  1. Tidak efisien dalam penggunaan memory
  2. Menyiakan banyak waktu komputasi
  3. Pada suatu aplikasi, representasi statis tidak di mungkinkan.






Membuat struktur data objek warna


Pada pembahasan sebelumnya semua grafik yang dihasilkan berapa garis, pembahasan berikut adalah bagaimana membuat gambar yang di-blok dengan warna. Hal ini merupakan salah satu dasar dari grafika komputer untuk memberi warna pada setiap obyek gambar yang dihasilkan. Karena warna adalah satu elemen grafik yang dapat menarik perhatian pengguna. Grafik yang dihasilkan dengan warna-warna yang indah akan menambah daya tarik pengguna untuk menikmatinya. Pemilihan warna tentu menjadi salah satu syarat baik tidaknya sebuah obyek grafik yang ditampilkan.
Untuk membuat blok warna pada polygon, sebelumnya perlu didefinisikan struktur data untuk warna dengan format RGB sebagai berikut:
typedef struct {
float r, g, b;
} color_t;
Kemudian buatlah fungsi untuk mengubah/melakukan setting warna sebagai berikut:
(1) Fungsi dengan lanngsung memasukkan nilai r,g,b
void setColor(float r, float g, float b){
glColor3f(r,g,b);
}
(2) Fungsi dengan tipe data color_t
void setColor(color_t col){
glColor3f(col.r, col.g, col.b);
}
Kemudian membuat fungsi untuk memberi warna pada bagian dalam polygon dengan menambahkan fungsi berikut:
void fillPolygon(point2D_t p[],int n,color_t col){
setColor(col);
glBegin(GL_POLYGON);
for(int i=0;i<n;i++){
glVertex2f(p[i].x,p[i].y);
}
glEnd();
}


MENGGAMBAR OBJEK 2 DIMENSI


Animasi 2D/traditional animation
1 Pra produksi.
storyboard and character design
Contoh desain karakter dan storyboard
adalah tahapan sebelum produksi. Disini semua hal yang berkaitan dengan proses pembuatan karya animasi disiapkan. seperti membuat team,  membuat cerita, membuat naskah, membuat storyboard, exposure sheet, membuat animatic, merekam suara, membuat desain tokoh, merancang warna mood, dan seterusnya
exposure-sheetexposure sheet
2. Produksi
adalah tahapan dimulainya proses membuat karya animasi. Pada tahap ini dibagi menjadi beberapa divisi.
- Keyframe. Bertugas membuat gambar atau gerakan kunci
keyframe animationcontoh gambar keyframe dari buku the animators survival kit
- Inbetween. bertugas meneruskan gambar dan gerakan yang sudah dibuat oleh keyframer.
inbetween drawing animation
contoh gambar breakdown/inbetween dari buku the animators survival kit
- Pencil test. gambar yang masih kasar dan belum sempurna tadi akan dilihat dulu hasilnya, dengan cara di scan dan kemudian di atur dengan software lalu ditayangkan/preview.
- Cleanup. membersihkan garis gambar sehingga rapi dan enak dilihat.
clean_up_animationContoh gambar yang sudah di clean up (pada bagian tangan)
- Scan. memindai gambar kedalam komputer
scanner_pegs_animationScaner yang ada pag bar untuk menempatkan kertas animasi
- Color. mewarnai gambar dengan menggunakan software
- Finishing. memperbaiki timing animasi dan penyempurnaan. Misalnya menambahkan efek gambar, dll
- Render. Project yang sudah selesai lantas di simpan dalam bentuk file movie

3. Pasca produksi
Adalah bagian terakhir dari rangkaian proses pembuatan karya animasi.
Disini karya animasi tadi akan dipoles dan diedit sehingga menjadi sebuah karya utuh yang enak dilihat.
















K5.MENERAPKAN TRANSFORMASI OBJEK 2 DIMENSI


Struktur data titik dan vektor

TRANSFORMASI OBYEK DUA DIMENSI

Grafika computer merupakan bidang yang menarik minat banyak orang. Salah satu sub bagian dari grafika adalah pemodelan objek. Dalam pemodelan objek 2D, berbagai objek dimodifikasi dengan melakukan berbagai operasi fungsi atau operasi transformasi geometri. Transformasi ini dapat berupa transformasi dasar ataupun gabungan dari berbagai transformasi geometri. Transformasi ini dikenal dengan Transformasi affine. Pada dasarnya, transformasi merupakan suatu operasi modifikasi bentuk objek tanpa merusak bentuk dasar dari objek. Salah satu contoh transformasi adalah transformasi dari window ke viewport.
Pada Viewport, Objek yang akan digambar pada layar biasanya mempunyai ukuran yang jauh lebih besar dibanding dengan ukuran layar, sehingga perlu dilakukan pemetaan transformasi yang memungkinkan objek tersebut bisa seluruhnya digambar dilayar, tetapi pada layar dengan koordinat yang terbatas, dan biasanya dibatasi oleh sebuah kotak yang disebut windows, sedangkan layarnya tersebut disebut Viewport.
1. Langkah-Langkah Transformasi Viewing 2 Dimensi
1) Pembentukan scene pada WC menggunakan output primitif atribut.
2) Untuk mendapatkan orientasi tertentu dari window, maka ditentukan sistem VC 2 dimensi pada WC. Frame digunakan untuk melengkapi penentuan orientasi dari windows persegi empat . Setelah frame dibentuk dapat ditransformasikan ke dalam WC untuk menampilkan koordinat.
3) Kemudian viewport ditentukan dalam normalized NVC (pada batasan antara 0 dan 1) dan memetakan deskripsi VC dari scene pada Normalized Coordinate.
4) Akhirnya dilakukan clipping (pemotongan) pada semua gambar yang ada diluar viewport.
2. Macam-macam transformasi:
1) Transformasi Objek, yang ditransformasikan titik-titik yang menyusun objek tersebut.
2) Transformasi Koordinat, yang diubah system koordinatnya sehingga objek mengalami transformasi dikarenakan perubahan system koordinat tersebut.
3. Tujuan Transformasi :
1) Merubah atau menyesuaikan komposisi pandangan.
2) Memudahkan membuat objek yang simetris
3) Melihat objek dari sudut pandang berbeda
4) Memindahkan satu atau beberapa objek dari satu tempat ke tempat lain, biasanya digunakan pada animasi computer.
4. Transformasi dasar pada objek dua dimensi terdiri dari :

a. TRANSLASI

Translasi merupakan suatu proses yang menyebabkan perpindahan objek dari satu titik ke titik lain. Translasi dilakukan dengan penambahan translasi pada suatu titik koordinat dengan translasi vector yaitu (trx,try), dimana trx adalah translation vector menurut sumbu x sedangkan try adalah translasi vector terhadap sumbu y.
Koordinat baru titik yang ditranslasi dapat diperoleh dengan menggunakan rumus:
x = x + trx
y = y + try
imana (x,y) adalah koordinat asal suatu objek dan (x,y) adalah koordinat baru objek tersebut setelah ditranslasi.Translasi adalah transformasi dengan bentuk yang tetap memindahkan objek apa adanya. Dengan demikian setiap titik dari objek akan ditranslasi dengan besaran yang sama.

a. SKALA

Transformasi skala adalah perubahan ukuran suatu objek. P

b. ROTASI

Rotasi merupakan bentuk transformasi berupa pemutaran objek, dilakukan dengan menambahkan besaran pada absis X dan ordinat Y. Rotasi dua dimensi pada suatu objek akan memindahkan objek tersebut menurut garis melingkar. Pada bidang xy.

c. SHEARING

Shearing mempunyai beberapa pengertian, antara lain :
· Shearing adalah bentuk transformasi yang membuat distorsi dari bentuk suatu objek, seperti menggeser sisi tertentu.
· Shearing adalah suatu proses untuk mentransformasikan objek dengan cara “membebani” objek tersebut kea rah tertentu, sehingga dihasilkan suatu objek yang distorsi.
Dua macam shear yang umum adalah shear menurut sumbu x dan shear menurut sumbu y.

6. SISTEM KOORDINAT HOMOGEN
Sistem koordinat homogen adalah system koordinat yang mempunyai satu dimensi lebih tinggi dari system koordinat yang ditinjau. Digunakan untuk menyatakan semua proses transformasi dengan perkalian matrix termasuk pergeseran.


7. PEMBATALAN TRANSFORMASI AFFIN
Transformasi dari titik P ke titik Q dengan persamaan Q = PM + tr dapat dibatalkan atau dikembalikan dengan menggunakan persamaan P = ( Q – tr )M-1 dengan catatan bahwa M adalah marix non singular (mempunyai determinan tidak sama dengan nol).
Untuk objek dua dimensi dapat dilakukan dengan matrix 2x2 karena pembatalan transformasi tidak perlu dengan bantuan koordinat homogen.

interface:

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQiZ36JWBF25eYBQkj5B9yEqyBo3tOsYHGaWSWrSfNzkU9KZ6QYavwEl9Yct2uIH0rrn0wqvrWSMuowL92s5JEz3q2uqo7TSaa-0m1lRr-ilT-ceNskHWPUArPw0yaQ-5epgL_EaJASIwY/s320/1.JPG

Source code Program :

Unit1.cpp
//---------------------------------------------------------------------------
#include // membaca file vcl untuk memulai pembuatan program pada Borland C++ Builder
#include //membaca file header math yang berhubungan dengan perhitungan
#pragma hdrstop à library yang sudah disediakan oleh Borland C++ Builder
#include "Unit1.h" // membaca file Unit1.h
#pragma package(smart_init) // library yang sudah disediakan oleh Borland C++ Builder
#pragma resource "*.dfm" // library yang sudah disediakan oleh Borland C++ Builder
TForm1 *Form1;
struct Elemen { float x,y ;} ; //objek berbentuk struktur dengan variabel X dan Y yang bertipe float
Elemen Objek[6]; //deklarasi elemen
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
// memanggil fungsi TForm1
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{ int i;
Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);
Image1->Canvas->MoveTo(Objek[5].x,Objek[5].y); //move to memmindahkan garis
for (i=1;i<=5;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};
} //line to menambah garis
//========================================================================
void __fastcall TForm1::FormActivate(TObject *Sender)
{ Objek[1].x = 100; Objek[1].y = 50;
Objek[2].x = 50; Objek[2].y = 100;
Objek[3].x = 100; Objek[3].y = 100;
Objek[4].x = 100; Objek[4].y = 150;
Objek[5].x = 150; Objek[5].y = 100;
FormShow(Sender);
}
// memanggil fungsi FormActivate untuk membuat objek dengan menentukan titik-titik objek pada koordinat x dan y
//========================================================================
void __fastcall TForm1::ButtonatasClick(TObject *Sender)
{
int i;
for (i=1;i<=5;i++){ Objek[i].y-=5;};
FormShow(Sender);
}
// memanggil fungsi ButtonatasClick
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonkananClick(TObject *Sender)
{
int i;
for (i=1;i<=5;i++){ Objek[i].x+=5;};
FormShow(Sender);
}
// memanggil fungsi ButtonkananClick
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonkiriClick(TObject *Sender)
{
int i;
for (i=1;i<=5;i++){ Objek[i].x-=5;};
FormShow(Sender);
}// memanggil fungsi ButtonkiriClick
//----------------------------------------- ----------------------------------
void __fastcall TForm1::ButtonbawahClick(TObject *Sender)
{
int i;
for (i=1;i<=5;i++){ Objek[i].y+=5;};
FormShow(Sender);
}// memanggil fungsi ButtonbawahClick
//---------------------------------------------------------------------------
void __fastcall TForm1:: Button1Click (TObject *Sender)
{
Elemen TempObjek[6];
int i; float Sdt;
for (i=1;i<=5;i++)
{ Objek[i].x=Objek[i].x-Image1->Width / 2;
Objek[i].y=Objek[i].y-Image1->Height / 2;
Sdt=10*M_PI/180;
TempObjek[i].x=(Objek[i].x*cos(Sdt)-Objek[i].y*sin(Sdt));
TempObjek[i].y=(Objek[i].x*sin(Sdt)+Objek[i].y*cos(Sdt));
Objek[i]=TempObjek[i];
Objek[i].x=Objek[i].x+Image1->Width / 2;
Objek[i].y=Objek[i].y+Image1->Height / 2;
} FormShow(Sender);
}// memanggil fungsi Button1Click
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Elemen TempObjek[6];
int i,n,m; float Sdt;
for (i=1;i<=5;i++)
{
n = Objek[3].x;
m = Objek[3].y;
Objek[i].x=Objek[i].x-n;
Objek[i].y=Objek[i].y-m;
Sdt=10*M_PI/180;
TempObjek[i].x=(Objek[i].x*cos(Sdt)-Objek[i].y*sin(Sdt));
TempObjek[i].y=(Objek[i].x*sin(Sdt)+Objek[i].y*cos(Sdt));
Objek[i]=TempObjek[i];
Objek[i].x=Objek[i].x+n;
Objek[i].y=Objek[i].y+m;
}
FormShow(Sender);
}// memanggil fungsi Button2Click
//---------------------------------------------------------------------------
UNIT.H


// File ini berisi event handler untuk mengatasi sebuah event dari komponen yang ditempatkan pada sebuah form.
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPanel *Panel1;
TButton *Buttonkiri;
TButton *Buttonatas;
TButton *Buttonbawah;
TButton *Buttonkanan;
TImage *Image1;
TButton *Button1;
TButton *Button2;
void __fastcall FormShow(TObject *Sender);
void __fastcall FormActivate(TObject *Sender);
void __fastcall ButtonatasClick(TObject *Sender);
void __fastcall ButtonkananClick(TObject *Sender);
void __fastcall ButtonkiriClick(TObject *Sender);
void __fastcall ButtonbawahClick(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

OUTPUT :

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEH_0jsVLUySNize4JvIaHNjvUrvqC6eBCGuoUimWY1ThP03LKMj1KP_7vqe9fKiMqLHlr-EZTIYI5guip8sVaz13tcTJ-vdZGApdBBwJ-h5kLl-dEaQDFgmI8ILUBBMnEZcacu8pC2rzg/s320/2.JPG













K6.MENERAPKAN PEMBUATAN MODEL OBJEK 3 DIMENSI

­­­­­­Objek 3 Dimensi C++ Open Graphic Library
Objektigadimensijelasmemilikibanyakperbedaandenganobjekduadimensi. Dengankoordinat x, y, z yang diperlukan, membuatpengerjaanobjektigadimensimenjadilebihrumit. Dalampembuatannya, diperlukankoordinatuntukmenentukansudutpandangpengamat, kedalaman yang diperlukan, dan transformasiobjekuntukmempermudahpengerjaan.
OpenGL dirancangsebagaiperangkat yang instandantidaktergantungpadasistemoperasidanbahasapemrogramanapapun. Perintah yang terdapatpada OpenGL tetapsamapadasemuasistemoperasikarena OpenGL tidakmengimplementasikan window khususuntukmerancangsuatuobjekseperti program visual lainnya. Sebagaigantinya, diharuskanuntukmembuat window sendirimenurutsistemoperasi yang digunakandanbahasapemrograman yang dipakai.



1. Kubus 3D
#include
GLfloatlight_diffuse[] = {1.0, 0.0, 0.0, 1.0};
//GLfloatlight_diffuse[] = {0.9f, 0.9f, 0.9f, 1.0f};
GLfloatlight_position[] = {1.0, 1.0, 1.0, 0.0};
//GLfloatlight_position[] = {2.0f, 2.0f, 2.0f, 0.0f};
void gambar3D(void)
{
glBegin(GL_QUADS);
// mukadepan
glNormal3f( 0.0f, 0.0f, 1.0f); //Normal menuju Kita
glVertex3f(-1.0f, -1.0f, 1.0f); //Titik 1 (depan)
glVertex3f( 1.0f, -1.0f, 1.0f); //Titik 2 (depan)
glVertex3f( 1.0f, 1.0f, 1.0f); //Titik 3 (depan)
glVertex3f(-1.0f, 1.0f, 1.0f); //Titik 4 (depan)
// mukabelakang
glNormal3f( 0.0f, 0.0f,-1.0f); //Normal menjauh Kita
glVertex3f(-1.0f, -1.0f,-1.0f); //Titik 1 (belakang)
glVertex3f(-1.0f, 1.0f, 1.0f); //Titik 2 (atas)
glVertex3f( 1.0f, 1.0f, 1.0f); //Titik 3 (atas)
glVertex3f( 1.0f, 1.0f,-1.0f); //Titik 4 (atas)
// mukaatas
glNormal3f( 0.0f, 1.0f, 1.0f); //Normal berarahatas
glVertex3f(-1.0f, 1.0f,-1.0f); //Titik 1 (atas)
glVertex3f(-1.0f, 1.0f, 1.0f); //Titik 2 (atas)
glVertex3f( 1.0f, 1.0f, 1.0f); //Titik 3 (atas)
glVertex3f( 1.0f, 1.0f,-1.0f); //Titik 4 (atas)
//mukabawah
glNormal3f( 0.0f, -1.0f, 0.0f); //Normal berarahbawah
glVertex3f(-1.0f, -1.0f,-1.0f); //Titik 1 (bawah)
glVertex3f( 1.0f, -1.0f,-1.0f); //Titik 2 (bawah)
glVertex3f( 1.0f, -1.0f, 1.0f); //Titik 3 (bawah)
glVertex3f(-1.0f, -1.0f, 1.0f); //Titik 4 (bawah)
//mukakanan
glNormal3f( 1.0f, 0.0f, 0.0f); //Normal berarahkekanan
glVertex3f( 1.0f, -1.0f,-1.0f); //Titik 1 (kanan)
glVertex3f( 1.0f, 1.0f,-1.0f); //Titik 2 (kanan)
glVertex3f( 1.0f, 1.0f, 1.0f); //Titik 3 (kanan)
glVertex3f( 1.0f, -1.0f, 1.0f); //Titik 4 (kanan)
//mukakiri
glNormal3f(-1.0f, 0.0f, 0.0f); //Normal berarahkekiri
glVertex3f(-1.0f, -1.0f,-1.0f); //Titik 1 (kiri)
glVertex3f(-1.0f, -1.0f, 1.0f); //Titik 2 (kiri)
glVertex3f(-1.0f, 1.0f, 1.0f); //Titik 3 (kiri)
glVertex3f(-1.0f, 1.0f,-1.0f); //Titik 4 (kiri)
glEnd();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gambar3D();
glutSwapBuffers();
}
void inisialisasi(void)
{
//pencahayaan
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
//Buffer
glEnable(GL_DEPTH_TEST);
//setup kubus
glMatrixMode(GL_PROJECTION);
gluPerspective(40.0,1.0,1.0,10.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0, 0.0, 5.0, // melihatpada (0,0,5)
0.0, 0.0, 0.0, // center pada (0,0,0)
0.0, 1.0, 0.0); // arah Y
/* Mengaturposisisudut */
//glTranslatef(0.0, 0.0, -1.0);
glRotatef(30, 0.0, 1.0, 1.0);
glRotatef(15, 1.0, 1.0, 0.0);
}
intmain(intargc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("GrafikaKomputer 3 Dimensi");
glutDisplayFunc(display);
inisialisasi();
glutMainLoop();
return 0;
}


Gambar 1. Kubus
2. Prisma 3D
#include
GLfloatlight_diffuse[] = {5.0, 4.0, 4.0, 5.0};
//GLfloatlight_diffuse[] = {0.9f, 0.9f, 0.9f, 1.0f};
GLfloatlight_position[] = {1.0, 1.0, 1.0, 0.0};
//GLfloatlight_position[] = {2.0f, 2.0f, 2.0f, 0.0f};
void gambar3D(void)
{
glBegin(GL_QUADS);
// mukabelakang
glNormal3f( 0.0f, 0.0f,0.0f); //Normal menjauh Kita
glVertex3f(-1.0f, 1.0f,0.0f); //Titik 1 (belakang)
glVertex3f(1.0f, 1.0f, 0.0f); //Titik 2 (belakang)
glVertex3f( 1.0f, -1.0f, 0.0f); //Titik 3 (belakang)
glVertex3f( -1.0f, -1.0f,0.0f); //Titik 4 (belakang)
//mukakanan
glNormal3f( 1.0f, 0.0f, 0.0f); //Normal berarahkekanan
glVertex3f( 0.0f, 1.0f,1.0f); //Titik 1 (kanan)
glVertex3f( 1.0f, 1.0f,0.0f); //Titik 2 (kanan)
glVertex3f( 1.0f, -1.0f, 0.0f); //Titik 3 (kanan)
glVertex3f( 0.0f, -1.0f, 1.0f); //Titik 4 (kanan)
//mukakiri
glNormal3f(-1.0f, 0.0f, 0.0f); //Normal berarahkekiri
glVertex3f(-1.0f, 1.0f,0.0f); //Titik 1 (kiri)
glVertex3f(0.0f, 1.0f, 1.0f); //Titik 2 (kiri)
glVertex3f(0.0f, -1.0f, 1.0f); //Titik 3 (kiri)
glVertex3f(-1.0f, -1.0f,0.0f); //Titik 4 (kiri)
//atas
glNormal3f(0.0f, 1.0f, 0.0f); //Normal berarahkeatas
glVertex3f(-1.0f, 1.0f,0.0f); //Titik 1 (atas)
glVertex3f(1.0f, 1.0f, 0.0f); //Titik 2 (atas)
glVertex3f(0.0f, 1.0f, 1.0f); //Titik 3 (atas)
//bawah
glNormal3f(0.0f, -1.0f, 0.0f); //Normal berarahkebawah
glVertex3f(-1.0f, -1.0f,0.0f); //Titik 1 (bawah)
glVertex3f(0.0f, -1.0f, 1.0f); //Titik 2 (bawah)
glVertex3f(1.0f, -1.0f, 0.0f); //Titik 3 (bawah)
glEnd ();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gambar3D();
glutSwapBuffers();
}
void inisialisasi(void)
{
//pencahayaan
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
//Buffer
glEnable(GL_DEPTH_TEST);
//setup prisma
glMatrixMode(GL_PROJECTION);
gluPerspective(40.0,1.0,1.0,10.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0, 0.0, 5.0, // melihatpada (0,0,5)
0.0, 0.0, 0.0, // center pada (0,0,0)
0.0, 1.0, 0.0); // arah Y
/* Mengaturposisisudut */
//glTranslatef(0.0, 0.0, -1.0);
glRotatef(45, 1.0, 0.0, 1.0);
//glRotatef(15, 1.0, 1.0, 1.0);
}
intmain(intargc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("GrafikaKomputer 3 Dimensi");
glutDisplayFunc(display);
inisialisasi();
glutMainLoop();
return 0;
}


Gambar 2. Prisma
3. Antiprisma
#include
GLfloatlight_diffuse[] = {0.0, 1.0, .0, 0.0};
//GLfloatlight_diffuse[] = {0.9f, 0.9f, 0.9f, 1.0f};
GLfloatlight_position[] = {1.0, 1.0, 1.0, 0.0};
//GLfloatlight_position[] = {2.0f, 2.0f, 2.0f, 0.0f};
void gambar3D(void)
{
glBegin(GL_TRIANGLES);
// mukabelakang
glNormal3f( 0.0f, 0.0f,1.0f); //Normal menjauh Kita
glVertex3f(1.0f, 0.0f,-1.0f); //Titik 1 (belakang)
glVertex3f(-1.0f, 0.0f, -1.0f); //Titik 2 (belakang)
glVertex3f( 0.0f, 1.0f, 0.0f); //Titik 3 (belakang)
// mukadepan
glNormal3f( 0.0f, 0.0f, 1.0f); //Normal menuju Kita
glVertex3f(-1.0f, 0.0f, 1.0f); //Titik 1 (depan)
glVertex3f( 1.0f, 0.0f, 1.0f); //Titik 2 (depan)
glVertex3f( 0.0f, 1.0f, 0.0f); //Titik 3 (depan)
//mukakanan
glNormal3f( 1.0f, 0.0f, 0.0f); //Normal berarahkekanan
glVertex3f( 1.0f, 0.0f,1.0f); //Titik 1 (kanan)
glVertex3f( 1.0f, 0.0f,-1.0f); //Titik 2 (kanan)
glVertex3f( 0.0f, 1.0f, 0.0f); //Titik 3 (kanan)
//mukakiri
glNormal3f(-1.0f, 0.0f, 0.0f); //Normal berarahkekiri
glVertex3f(-1.0f, 0.0f,-1.0f); //Titik 1 (kiri)
glVertex3f(-1.0f,0.0f, 1.0f); //Titik 2 (kiri)
glVertex3f(0.0f, 1.0f, 0.0f); //Titik 3 (kiri)
//bawah
glNormal3f(0.0f, 0.0f, 0.0f); //Normal berarahkebawah
glVertex3f(-1.0f, 0.0f,1.0f); //Titik 1 (bawah)
glVertex3f(1.0f, 0.0f, 1.0f); //Titik 2 (bawah)
glVertex3f(1.0f, 0.0f, -1.0f); //Titik 3 (bawah)
glVertex3f(-1.0f, 0.0f, -1.0f); //Titik 4 (bawah)
glEnd();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gambar3D();
glutSwapBuffers();
}
void inisialisasi(void)
{
glClearColor(1.0,1.0,1.0,0.0);
//pencahayaan
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
//Buffer
glEnable(GL_DEPTH_TEST);
//setup antiprisma
glMatrixMode(GL_PROJECTION);
gluPerspective(40.0,1.0,1.0,10.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0, 0.0, 5.0, // melihatpada (0,0,5)
0.0, 0.0, 0.0, // center pada (0,0,0)
0.0, 1.0, 0.0); // arah Y
/* Mengaturposisisudut */
//glTranslatef(0.0, 0.0, -1.0);
glRotatef(45, 1.0, 0.5, 1.0);
glRotatef(15, 1.0, 1.0, 1.0);
}
intmain(intargc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("AntiPrisma");
glutDisplayFunc(display);
inisialisasi();
glutMainLoop();
return 0;
}
Gambar 3. Antiprisma

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gambar3D();
glutSwapBuffers();
}
void inisialisasi(void)
{
glClearColor(1.0,1.0,1.0,0.0);
//pencahayaan
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
//Buffer
glEnable(GL_DEPTH_TEST);
//setup antiprisma
glMatrixMode(GL_PROJECTION);
gluPerspective(40.0,1.0,1.0,10.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0, 0.0, 5.0, // melihatpada (0,0,5)
0.0, 0.0, 0.0, // center pada (0,0,0)
0.0, 1.0, 0.0); // arah Y
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,0);
gambar3D();
glutSwapBuffers();
}
void inisialisasi(void)
{
//Pencahayaan
glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
//Buffer
glEnable(GL_DEPTH_TEST);
//setup tetrahedron
glMatrixMode(GL_PROJECTION);
gluPerspective(60.0,1.0,1.0,10.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0,0.0,5.0, //Melihatpada (0,0,5)
0.0,0.0,0.0,//center pada (0,0,0)
0.0,1.0,0.0);//arah Y
/*Mengaturposisisudut*/
glTranslatef(0.0,0.0,-1.0);
glRotatef(-29, 1.0,-1.0,1.0);
glRotatef(15, 0.0,1.0,0.0);
}
intmain(intargc,char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutCreateWindow("GrafikaKomputer 3 Dimensi");
glutDisplayFunc(display);
inisialisasi();
glutMainLoop();
return 0;
}
//--------------------------------------------------------
Gambar 4. Tetrahedron
5. Octahedron
#include
GLfloatlight_diffuse[] = {12.0, 1.0, 5.0, 2.0};
//GLfloatlight_diffuse[] = {0.9f, 0.9f, 0.9f, 1.0f};
GLfloatlight_position[] = {1.0, 1.0, 1.0, 0.0};
//GLfloatlight_position[] = {2.0f, 2.0f, 2.0f, 0.0f};
void gambar3D(void)
{
glBegin(GL_TRIANGLES);
// mukabelakangatas
glNormal3f( 0.0f, 0.0f,1.0f); //Normal menjauh Kita
glVertex3f(1.0f, 0.0f,-1.0f); //Titik 1 (belakang)
glVertex3f(-1.0f, 0.0f, -1.0f); //Titik 2 (belakang)
glVertex3f( 0.0f, 1.0f, 0.0f); //Titik 3 (belakang)
// mukadepanatas
glNormal3f( 0.0f, 0.0f, 1.0f); //Normal menuju Kita
glVertex3f(-1.0f, 0.0f, 1.0f); //Titik 1 (depan)
glVertex3f( 1.0f, 0.0f, 1.0f); //Titik 2 (depan)
glVertex3f( 0.0f, 1.0f, 0.0f); //Titik 3 (depan)
//mukakananatas
glNormal3f( 1.0f, 0.0f, 0.0f); //Normal berarahkekanan
glVertex3f( 1.0f, 0.0f,1.0f); //Titik 1 (kanan)
glVertex3f( 1.0f, 0.0f,-1.0f); //Titik 2 (kanan)
glVertex3f( 0.0f, 1.0f, 0.0f); //Titik 3 (kanan)
//mukakiriatas
glNormal3f(-1.0f, 0.0f, 0.0f); //Normal berarahkekiri
glVertex3f(-1.0f, 0.0f,-1.0f); //Titik 1 (kiri)
glVertex3f(-1.0f,0.0f, 1.0f); //Titik 2 (kiri)
glVertex3f(0.0f, 1.0f, 0.0f); //Titik 3 (kiri)
// mukabelakangbawah
glNormal3f( 0.0f, 0.0f,1.0f); //Normal menjauh Kita
glVertex3f(1.0f, 0.0f,-1.0f); //Titik 1 (belakang)
glVertex3f(-1.0f, 0.0f, -1.0f); //Titik 2 (belakang)
glVertex3f( 0.0f, -1.0f, 0.0f); //Titik 3 (belakang)
// mukadepanbawah
glNormal3f( 0.0f, 0.0f, 1.0f); //Normal menuju Kita
glVertex3f(-1.0f, 0.0f, 1.0f); //Titik 1 (depan)
glVertex3f( 1.0f, 0.0f, 1.0f); //Titik 2 (depan)
glVertex3f( 0.0f, -1.0f, 0.0f); //Titik 3 (depan)
//mukakananbawah
glNormal3f( 1.0f, 0.0f, 0.0f); //Normal berarahkekanan
glVertex3f( 1.0f, 0.0f,1.0f); //Titik 1 (kanan)
glVertex3f( 1.0f, 0.0f,-1.0f); //Titik 2 (kanan)
glVertex3f( 0.0f, -1.0f, 0.0f); //Titik 3 (kanan)
//mukakiribawah
glNormal3f(-1.0f, 0.0f, 0.0f); //Normal berarahkekiri
glVertex3f(-1.0f, 0.0f,-1.0f); //Titik 1 (kiri)
glVertex3f(-1.0f,0.0f, 1.0f); //Titik 2 (kiri)
glVertex3f(0.0f, -1.0f, 0.0f); //Titik 3 (kiri)
glEnd();
glBegin(GL_QUADS);
//bawah
glNormal3f(0.0f, 0.0f, 0.0f); //Normal berarahkebawah
glVertex3f(-1.0f, 0.0f,1.0f); //Titik 1 (bawah)
glVertex3f(1.0f, 0.0f, 1.0f); //Titik 2 (bawah)
glVertex3f(1.0f, 0.0f, -1.0f); //Titik 3 (bawah)
glVertex3f(-1.0f, 0.0f, -1.0f); //Titik 4 (bawah)
glEnd();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gambar3D();
glutSwapBuffers();
}
void inisialisasi(void)
{
glClearColor(1.0,1.0,1.0,0.0);
//pencahayaan
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
//Buffer
glEnable(GL_DEPTH_TEST);
//setup tetahedron
glMatrixMode(GL_PROJECTION);
gluPerspective(40.0,1.0,1.0,10.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0, 0.0, 5.0, // melihatpada (0,0,5)
0.0, 0.0, 0.0, // center pada (0,0,0)
0.0, 1.0, 0.0); // arah Y
/* Mengaturposisisudut */
//glTranslatef(0.0, 0.0, -1.0);
glRotatef(45, 1.0, 0.0, 0.0);
//glRotatef(15, 1.0, 1.0, 1.0);
}
intmain(intargc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("Tetrahedron");
glutDisplayFunc(display);
inisialisasi();
glutMainLoop();
return 0;
}


Gambar 5. Octahedron


6. ObjekBebas
#include
GLfloatlight_diffuse[] = {0.0, 0.1, 1.0, 1.0};
GLfloatlight_position[] = {1.0, 1.0, 1.0, 0.0};
void octahedron(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
GLfloatintensitasCahaya[]={0.9f, 0.9f, 0.9f, 1.0f};
GLfloatposisiCahaya[]={2.0f, 2.0f, 2.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_POSITION, posisiCahaya);
glLightfv(GL_LIGHT0, GL_DIFFUSE, intensitasCahaya);
GLfloatbahan_ambient[]={0.0f, 0.5f, 0.6f, 1.0f};
GLfloatbahan_diffuse[]={12.0, 1.0, 5.0, 2.0};
GLfloatbahan_specular[]={1.0f, 1.0f, 1.0f, 1.0f};
GLfloatbahan_shininess[]={90.0f};
glMaterialfv(GL_FRONT, GL_AMBIENT, bahan_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, bahan_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, bahan_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, bahan_shininess);
glPushMatrix();
glTranslatef(2.0, 1.0, -8.0);
glutSolidOctahedron();
glPopMatrix();
glFlush();
}
void icosahedron(void)
{
GLfloatintensitasCahaya[]={0.9f, 0.9f, 0.9f, 1.0f};
GLfloatposisiCahaya[]={2.0f, 2.0f, 2.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_POSITION, posisiCahaya);
glLightfv(GL_LIGHT0, GL_DIFFUSE, intensitasCahaya);
GLfloatbahan_ambient[]={0.0f, 0.5f, 0.6f, 1.0f};
GLfloatbahan_diffuse[]={0.0, 1.0, 0.0, 0.0};
GLfloatbahan_specular[]={1.0f, 1.0f, 1.0f, 1.0f};
GLfloatbahan_shininess[]={90.0f};
glMaterialfv(GL_FRONT, GL_AMBIENT, bahan_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, bahan_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, bahan_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, bahan_shininess);
glPushMatrix();
glTranslatef(-4, -2.5f, -8.0);
glutSolidIcosahedron();
glPopMatrix();
glFlush();
}
void dodecahedron(void)
{
GLfloatintensitasCahaya[]={0.9f, 0.9f, 0.9f, 1.0f};
GLfloatposisiCahaya[]={2.0f, 2.0f, 2.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_POSITION, posisiCahaya);
glLightfv(GL_LIGHT0, GL_DIFFUSE, intensitasCahaya);
GLfloatbahan_ambient[]={0.0f, 0.5f, 0.6f, 1.0f};
GLfloatbahan_diffuse[]={10.0, 1.0, 0.0, 1.0};
GLfloatbahan_specular[]={1.0f, 1.0f, 1.0f, 1.0f};
GLfloatbahan_shininess[]={90.0f};
glMaterialfv(GL_FRONT, GL_AMBIENT, bahan_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, bahan_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, bahan_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, bahan_shininess);
glPushMatrix();
glTranslatef(2.5f, -2.5f, -8.0);
glutSolidDodecahedron();
glPopMatrix();
glFlush();
}
void tetahedron(void)
{
GLfloatintensitasCahaya[]={0.9f, 0.9f, 0.9f, 1.0f};
GLfloatposisiCahaya[]={2.0f, 2.0f, 2.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_POSITION, posisiCahaya);
glLightfv(GL_LIGHT0, GL_DIFFUSE, intensitasCahaya);
GLfloatbahan_ambient[]={0.0f, 0.5f, 0.6f, 1.0f};
GLfloatbahan_diffuse[]={9.0, 0.0, 0.0, 1.0};
GLfloatbahan_specular[]={1.0f, 1.0f, 1.0f, 1.0f};
GLfloatbahan_shininess[]={90.0f};
glMaterialfv(GL_FRONT, GL_AMBIENT, bahan_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, bahan_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, bahan_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, bahan_shininess);
glPushMatrix();
glTranslatef(-4.0, 1.0, -8.0);
glRotatef(60, 1.0, 0.0, 0.0);
glutSolidTetrahedron();
glPopMatrix();
glFlush();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
octahedron();
icosahedron();
dodecahedron();
tetahedron();
glutSwapBuffers();
}
void inisialisasi(void)
{
int w=800, h=600;
glShadeModel(GL_FLAT);
glClearColor(1.0,1.0,1.0,0.0);
glClearAccum(0.0,0.0,0.0,0.0);
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0,(GLfloat) w/(GLfloat) h,1.0,20.0);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glEnable(GL_NORMALIZE);
}
intmain(intargc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("GrafikaKomputer 3 Dimensi");
glutDisplayFunc(display);
inisialisasi();
glutMainLoop();
return 0;
}


























TITIK


membuat titik pada OPENGL
berikut contohnya:


#include <gl/glut.h>

void Draw() {

 glClear(GL_COLOR_BUFFER_BIT);


 glColor3f(1.0, 1.0, 1.0);


 glBegin(GL_POINTS);

    glVertex3f(0.2, 0.2, 0.0);
    glVertex3f(0.8, 0.2, 0.0);
    glVertex3f(0.2, 0.5, 0.0);
    glVertex3f(0.8, 0.5, 0.0);
    glVertex3f(0.2, 0.8, 0.0);
    glVertex3f(0.8, 0.8, 0.0);
    glEnd();
    glFlush();
}

void Initialize() {

 glClearColor(0.0, 0.0, 0.0, 0.0);


 glMatrixMode(GL_PROJECTION);


 glLoadIdentity();


 glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

}

int main(int iArgc, char** cppArgv) {

 glutInit(&iArgc, cppArgv);


 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);


 glutInitWindowSize(250, 250);


 glutInitWindowPosition(200, 200);


 glutCreateWindow("Lesson 1");


 Initialize();


 glutDisplayFunc(Draw);


 glutMainLoop();


 return 0;

}


dan berikut hasilnya

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2YLkpvJYPJw_HIb09dmbVaUiikdaRRiFASXGfinpnnYAF_kIZ98Xn_IUwLmSnmKFtW0xO_VZSPcKlOR8f-_NLjk5t5q-zwMOhWSxACgEEIpN0Bv6BvYcFZjwtDsDM2ReqGfKSCYzZdHvr/s1600/titik.png































Tidak ada komentar:

Posting Komentar