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 :
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
• 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.
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.
Langkah 2.
Langkah 3.
Install file
"codeblocks-13.12mingw-setup.exe" yang udah kamu install di langkah
pertama tadi. Klik next terus hingga installasinya complete.
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.
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.
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.
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.
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.
Maka akan
muncul kotak dialog ketiga. Pastikan kita memilih "GNU GCC Compiler"
pada dropdown menu "Compiler". Setelah itu klik Finish.
Langkah 7.
Sekarang
lihat project yang telah kita buat tadi di jendela sebelah kiri. Klik kanan
pada project coba tersebut, kemudian klik Build Option.
Kalau sudah,
akan muncul sebuah kotak dialog. Klik terlebih dahulu tulisan "coba"
yang berada di atas tulisan "Debug" dan "Release".
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.
Sekarang
kita tambahkan lagi "glu32" dan "glut32".
Sehingga kini terdapat 3 link pada kotak Link libraries, yaitu opengl32, glu32 dan glut32. Kemudian klik OK.
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".
Kemudian
muncul kotak dialog Multiple Selection. Centang "Debug" dan
"Release" kemudian klik OK.
Jika sudah
berhasil. Ketik kode ini pada project "hello.cpp".
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.
Kemudian
klik menu Build, klik Run atau tekan tombol CTRL+F10. Dan hasilnya akan seperti
di bawah ini.
Window area menggambar
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.


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.

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




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
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.
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
di
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 Polar
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
Status
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.
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
di
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 Polar

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
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
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
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
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
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 :
- Pengurutan internal
Pengurutan
dilakukan terhadap sekumpulan data di media memory internal komputer dimana
data dapat di akses elemennya secara langsung.
- 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 :
- Array sangat cocok untuk pengaksesan acak. Sembarang elemen di array dapat diacu secara langsung tanpa melalui elemen-elemen lain.
- Jika berada di suatu lokasi elemen, maka sangat mudah menelusuri ke elemen-elemen tetangga, baik elemen pendahulu atau elemen penerus 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 :
- Array harus bertipe homogen. Kita tidak dapat mempunyai array dimana satu elemenadalah karakter, elemen lain bilangan, dan elemen lain adalah tipe-tipe lain
- 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):
- Tidak efisien dalam penggunaan memory
- Menyiakan banyak waktu komputasi
- Pada suatu aplikasi, representasi statis tidak di mungkinkan.
Membuat struktur data objek warna
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
1 Pra produksi.

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 sheetadalah tahapan dimulainya proses membuat karya animasi. Pada tahap ini dibagi menjadi beberapa divisi.
- Keyframe. Bertugas membuat gambar atau gerakan kunci
- Inbetween. bertugas meneruskan gambar dan gerakan yang sudah dibuat oleh keyframer.

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.
- Scan. memindai gambar kedalam komputer
- 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.
//---------------------------------------------------------------------------
#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
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;
}
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











































