SKRIPSI Diajukan Untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Jurusan Teknik Informatika
TEKNIK CELL SHADING MENGGUNAKAN OPENGL SKRIPSI Diajukan Untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Jurusan Teknik Informatika DISUSUN OLEH: Stanislaus Charlo Desanto NIM : 015314037 PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS SANATA DHARMA YOGYAKARTA 2008
CELL SHADING TECHNIQUE USING OPENGL
A Thesis
Presented as Partial Fulfillment of the Requirements
to Obtain the Sarjana Teknik Degree
in Informatics Engineering
By:
Stanislaus Charlo Desanto
NIM : 015314037
DEPARTMENT OF INFORMATICS ENGINEERING
FACULTY OF SCIENCE AND TECHNOLOGY
SANATA DHARMA UNIVERSITY
YOGYAKARTA
PERNYATAAN KEASLIAN KARYA
Dengan ini saya menyatakan bahwa tugas akhir ini tidak terdapat karya yang pernah diajukan untuk memperoleh gelar sarjana disuatu perguruan tinggi, dan sepanjang pengetahuan saya, juga tidak terdapat karya atau pendapat yang pernah ditulis atau diterbitkan oleh orang lain, kecuali yang secara tertulis diacu dalam naskah ini dan disebutkan dalam daftar pustaka.
Yogyakarta, 21 Januari 2008 Penulis
Stanislaus Charlo Desanto
HALAMAN PERSEMBAHAN
Kupersembahkan semua ini kepada: 2. Tuhan Yang Maha Esa atas kehidupan di dunia.
3. Ayah dan ibuku yang tercinta.
4. Semua kakak-kakakku yang begitu berarti dalam kehidupanku.
5. Semua teman-temanku yang menjadi sahabat dalam suka dan duka.
HALAMAN MOTTO
HARAPAN, IMAN DAN CINTA KASIH
- Ajaran Katolik--
ABSTRAKSI
Tujuan dari pembuatan program ini adalah mempelajari teknik cell
shading dan mengimplementasikan pada rendering 3-Dimensi menggunakan API
OpenGL.Metodologi penelitian yang digunakan adalah laboratory experiment yaitu mempelajari teori cell shading dan OpenGL kemudian melakukan pemrograman serta mengujikan kedalam bentuk program.
Hasil program mampu merender obyek 3-Dimensi bertipe RAW secara terus menerus dengan teknik cell shading.
ABSTRACT
The aim of this program is researching cell shading technique and implementing at 3-Dimension rendering using OpenGL API .
methodology
The used is laboratory experiment , which are learn about cell shading theory and OpenGL then do programming and testing it at application.
The result of this application could render as real time rendering RAW type 3-Dimension based at cell shading method.
KATA PENGANTAR
Puji syukur penulis panjatkan kepada Tuhan Yang Maha Esa atas berkat dan petunjuk-Nya sehingga tugas akhir ini dapat terselesaikan.
Tugas akhir ini dibuat untuk memenuhi salah satu syarat akademis yang harus dilaksanakan untuk mendapat mendapat gelar sarjana strata-1 di jurusan Teknik Informatika fakultas Teknik Universitas Sanata Dharma.
Pada kesempatan ini, penulis ingin menyampaikan terima kasih yang sebesar-besarnya kepada:
1. Prof. F. Soesianto, B.Sc.E.,Ph.D. yang telah membimbing dalam menyusun tugas akhir ini.
2. Seluruh dosen Teknik Informatika Sanata Dharma yang telah memberi banyak ilmu dan bimbingan.
3. Karyawan Sekretariatan Teknik, Petugas Laboratorium yang telah banyak membantu.
4. Teman-teman angkatan 2001 khususnya kelas A yang banyak membantu dan memberi semangat dalam menyusun tugas akhir ini.
Yogyakarta, 24 Januari 2008 Penulis
DAFTAR ISI
BAB I Pendahuluan ……………..…… ……………………………… .1
2.2.1 Aplikasi...................... ………….…..………………… 6
2.2 Saluran Rendering Citra.……..…………….…………………… 5
2.1 Real Time Rendering........……..……………………………….. 5
BAB II LANDASAN TEORI ……………..…………………………………. 5
1.6 Sistematika Penulisan ……………..……………………………. 3
1.5 Metode Penelitian……………..………………………………… 3
1.4 Rumusan Masalah.......................……………………………….. 3
1.3 Tujuan dan Manfaat Penelitian...……………………………….3
1.2 Batasan Masalah .................... …………………………………. 2
1.1 Latar Belakang …………………………………………………. 1
Daftar Tabel xii
Halaman Judul i
Daftar Gambar xi
Daftar Isi x
Kata Pengantar ix
Abstract viii
Abstrak vii
Halaman Motto vi
Halaman Persembahan v
Pernyataan Keaslian Karya iv
Halaman Pengesahan iii
Halaman Persetujuan ii
2.2.2 Geometri........................................................................... 7
5.2.2.1Transformasi Model dan Sudut Pandang.......... 7
2.5.2 Pemakaian OpenGL ...................................................... 23
4.2 Penempatan OpenGL di Visual C++ .......................................... 37
4.1 Pemakaian OpenGL .................................................................... 36
BAB IV IMPLEMENTASI ................................................................................ 36
3.3.2 Flowchart......................................................................... 34
3.3.1 Metode Cell shading …….......…………...…………… 31
3.3. Cell shading …………………………………….................…... 30
3.2 Toon shading…….....................……………………………….… 28
3.1 Shading...... ……………..………………………………………. 28
BAB III ANALISA........................... ……………….………………………… 28
2.6 Visual C++ dan aplikasi Windows………..…………………... 25
2.5.1 Sejarah OpenGL ............................................................ 20
2.2.2.2 Pencahayaan ................................................... 9
2.5 OpenGL................................... ……….……………………….. 19
2.4 Pembuatan Model....………..…………………………………. 17
2.3.4 Perhitungan Komponen-komponen................................ 15
2.3.3 Komponen Ambient ....................................................... 15
2.3.2 Komponen Specular ...................................................... 14
2.3.1 Komponen Diffuse ......................................................... 12
2.3 Sumber Cahaya ......………..………………….………………. 12
2.2.3 Rasterisasi..................................................................... 12
2.2.2.5 Screen Mapping............................................. 11
2.2.2.4 Clipping ......................................................... 10
2.2.2.3 Proyeksi .......................................................... 9
4.3 Membuat jendela OpenGL ........................................................... 39
4.3.1 Fungsi CreateGLWindow ................................................ 40
4.3.2 Fungsi KillGLWindow .................................................... 41
4.3.3 Fungsi WndProc ............................................................... 44
4.3.4 Fungsi ResizeGLScene .................................................... 45
4.4 Rendering ..................................................................................... 45
4.5 Penggunaan Model ....................................................................... 48
4.6 Rotasi Obyek ............................................................................. 49
4.7 Pemakaianan File untuk Modeling .............................................. 51
4.8 Cell shading ................................................................................. 55
4.9 Garis Tepi .................................................................................... 59
4.10 Pemberian Warna ……………………………………………... 62
BAB V ANALISA HASIL ............................................................................... 64 BAB VI KESIMPULAN ................................................................................... 66 DAFTAR PUSTAKA …………………………………………………………. 67 lampiran A ………………………………………………....…………………. 68 lampiran B ……………………………………………………………….…. .. 71
DAFTAR GAMBAR Gambar Keterangan Halaman
4.10 Hasil render cell shading ditambah garis tepi
53
4.6 Rendering dengan pencahayaan normal
55
4.7 Hasil render cell shading 2 warna
59
4.8 Hasil render cell shading 3 warna
59
4.9 Hasil render kawat polygon
61
61
50
4.11 Hasil akhir rendering
62
5.1 Hasil yang ingin diperoleh
63
5.2 Hasil render realistik
64
5.3 Hasil render cell shading
64 L.1 proyeksi orthographic
69 L.2 proyeksi perspective
4.5 Rendering model dari file
4.4 Rendering model sederhana
2.1 arsitektur rendering citra berdasarkan implementasi
20 2.11 proses pembuatan jendela Windows
6 2.2 subbagian geometri menurut fungsinya
7 2.3 transformasi sudut pandang
8 2.4 proyeksi
10 2.5 clipping
10 2.6 screen mapping
11 2.7 komponen diffuse
12 2.8 komponen specular
14 2.9 normal
18 2.10 mesh polygon
27
47
3.1 Model shading untuk pencahayaan nyata
28
3.2 Ciri-ciri kartun tradisional
29 3.3 tabel teksture 1-Dimensi
33 3.4 flowchart
35 4.1 hasil pelacakan visual C++
39
4.2 Jendela OpenGL
45
4.3 Rendering dasar OpenGL
70
BAB I PENDAHULUAN
1.1 LATAR BELAKANG
Salah satu tujuan industri grafika komputer saat ini adalah menampilkan citra 3-Dimensi yang bagus dalam satuan waktu sekian milidetik pada layar komputer. Untuk menghasilkan gambar 3-Dimensi yang realistik diperlukan banyak proses yang perlu dilakukan, contohnya pembuatan model, pencahayaan, texturing, pemberian efek khusus, dan lainnya. Selain pembuatan gambar 3-Dimensi yang realistik, ada alternatif lain untuk menghasilkan gambar yang bagus, yaitu membuat tampilan hasil rendering tidak seperti kenyataan atau Non-photorealistic Rendering (NPR). Dalam NPR hasil rendering akan berupa seperti hasil gambaran tangan manusia ataupun seni lainnya. Salah satu teknik yang termasuk dalam NPR adalah
toon shading. Hasil dari teknik toon shading akan membuat obyek terlihat
seperti gambar kartun tradisional atau bergaya komik. Gambar bergaya kartun atau toon shading mempunyai dua kecenderungan yaitu penonjolan jelas pada tepi gambar (silhouettes) dan pewarnaan sederhana serta terdapat perubahan warna jelas antar daerah pada gambar (cel shading). Teknik Cel
shading menggunakan perhitungan cahaya, texture mapping 1-Dimensi dan
perhitungan vektor. Teknik silhouettes memilih bagian-bagian tertentu untuk diolah dengan warna hitam atau putih sesuai dengan posisinya. Dalam penggunaan lebih lanjut, hasil silhouettes digunakan sebagai garis tepi sebuah obyek 3-Dimensi.
Teknik toon shading telah banyak diterapkan dalam game, komik dan animasi. Toon shading juga lebih efisien dibandingkan dengan penggambaran manual satu persatu untuk menghasilkan kartun 2D. Oleh karena itu, penulis tertarik untuk mempelajari teknik cel shading bagian dari
toon shading dan menerapkannya dalam bentuk program aplikasi.
1.2 BATASAN MASALAH
Mengingat keterbatasan waktu dan tenaga, cell shading yang dibahas dalam tulisan ini dibuat menggunakan model lightning, tidak dengan pendekatan seni ataupun raytracing serta tidak membahas masalah perangkat keras seperti arsitektur memori, buses, chipsets. Program kompiler yang digunakan untuk implementasi adalah Visual C++ 6 dan API OpenGL , serta obyek model yang digunakan adalah modifikasi RAW files. Toon shading yang dihasilkan hanya berasal dari cell shading saja tidak sekaligus dengan silhouettes.
1.3 TUJUAN DAN MANFAAT PENELITIAN
Maksud penulisan ini adalah sebagai salah satu syarat untuk mencapai jenjang derajat sarjana S-1 Program Studi Teknik Informatika, Jurusan Teknik Informatika, Fakultas Teknik, Universitas Sanata Dharma
Tujuan penulisan ini adalah untuk mempelajari dan memahami teknik cel shading khususnya, dan real time rendering secara umum.
Manfaat yang didapat adalah peningkatan mutu citra 3-Dimensi dengan gaya tradisional seperti kartun.
1.4 RUMUSAN MASALAH
Permasalahan yang dihadapi penelitian ini adalah bagaimana melakukan rendering 3-Dimensi yang menghasilkan citra bergaya kartun dengan teknik
cel shading menggunakan OpenGL.
1.5 METODOLOGI PENELITIAN
Dalam penulisan ini, metode penulisan yang digunakan adalah
laboratory experiment. Pertama, penulis akan melakukan studi pustaka
melalui buku sumber maupun internet, kemudian melakukan pemrograman serta mengujikan hasil studi pustaka ke dalam bentuk program.
1.6 SISTEMATIKA PENULISAN
Sistematika penulisan ini adalah sebagai berikut :
BAB I. PENDAHULUAN Berisi tentang latar belakang masalah, pembatasan masalah, tujuan
BAB II. LANDASAN TEORI Berisi tentang teori-teori yang diperlukan dalam menerangkan metode-metode yang dibahas agar lebih mudah dalam memahaminya.
BAB III. PERANCANGAN Berisi pembahasan mengenai cel shading serta bagaimana mekanisme cara menghasilkannya dan menggambarkan bagaimana implementasi algoritma dan data struktur yang akan digunakan di bab berikutnya.
BAB IV. IMPLEMENTASI Berisi tentang bagaimana mengimplementasikan perancangan yang telah dibuat dengan menggunakan OpenGL. BAB V. ANALISA HASIL Berisi gambar yang dihasilkan oleh program yang dibuat dan perbandingannya serta analisanya. BAB VI. KESIMPULAN Berisi kesimpulan dari analisa sebelumnya serta saran sehubungan topik yang dibahas. DAFTAR PUSTAKA LAMPIRAN
BAB II LANDASAN TEORI
2.1 REAL TIME RENDERING
Rendering adalah proses perubahan dari tetapan primitif dalam bentuk koordinat obyek ke bentuk citra dalam frame buffer. Rendering adalah operasi utama yang dilakukan oleh OpenGL. Jika melihat hasil perkembangan grafika komputer akhir-akhir ini, gambar tampil pada layar monitor, kemudian pemakai melakukan respon terhadap gambar dan respon ini memberikan efek lanjut terhadap gambar. Perputaran reaksi pemakai dan proses rendering terjadi terus menerus dalam kecepatan cukup tinggi yang tidak terlihat mata tetapi telah menjadi suatu proses dinamis. Real Time Rendering memberi perhatian terhadap pembuatan gambar dalam komputer secepat mungkin.
2.2 SALURAN RENDERING CITRA Pipeline atau saluran, dapat ditemukan dalam berbagai bentuk misalnya
saluran air. Dalam saluran tersebut terdapat bagian-bagian yang harus dilewati secara berurutan, demikian juga dalam rendering gambar. Dalam hubungannya dengan real time rendering, terdapat 3 bagian yang harus dilalui yaitu bagian aplikasi, geometri, dan rasterisasi. Seperti pemberian namanya bagian aplikasi diimplementasikan pada perangkat lunak, bagian keras tergantung pada arsitekturnya, sedangkan bagian rasterisasi diimplementasikan pada perangkat keras. Gambar 2.1 memperlihatkan hubungan ketiga bagian dalam real time rendering.
Gambar 2.1 Arsitektur rendering citra berdasarkan implementasi.Pada pelaksanaannya, tahap yang pertama kali diproses adalah tahap aplikasi. Tahap geometri dilakukan setelah tahap aplikasi selesai diproses dan setelah tahap ini selesai maka proses dilanjutkan pada tahap rasterisasi.
2.2.1 APLIKASI
Pada bagian aplikasi, pengembang perangkat lunak mengendalikan secara penuh apa yang dibuat dan dapat merubah implementasi untuk meningkatkan mutu tampilan. Bagian ini mengurusi antara lain collision
detection atau pendektesian, dan merespon dua obyek yang bertubrukan,
teknik culling atau peningkatan kecepatan rendering dengan menyeleksi obyek melalui sudut pandang manusia, kontrol masukan dari media luar tidak diolah dibagian lain. Karena berbasis perangkat lunak maka bagian ini tidak dibagi menjadi subbagian lagi, meskipun bisa dieksekusi secara paralel pada beberapa prosesor.
2.2.2 GEOMETRI
Tahap geometri bertanggung jawab terhadap mayoritas operasi tiap-tiap
polygon atau tiap-tiap vertex. Bagian ini dibagi menjadi beberapa subbagian
menurut fungsinya. Pemakaian subbagian ini mungkin akan sama dengan
pipeline ataupun berbeda tergantung implementasinya. Gambar 2.2
memperlihatkan hubungan antara bagian-bagian dari tahap geometri menurut fungsinya.
Gambar 2.2 Subbagian geometri menurut fungsinya2.2.2.1 TRANSFORMASI MODEL DAN SUDUT PANDANG
Pada perjalanan menuju layar, obyek model diubah pada beberapa sistem koordinat atau space yang berbeda. Sebenarnya, obyek model terletak pada
model space tersendiri yang berarti tidak berubah secara keseluruhan. Setiap
model dapat dikumpulkan dengan transformasi model sehingga dapat diorientasikan atau diposisikan. Yang diubah oleh transformasi model adalah
vertex dan normal dan setelah perubahan, model akan menggunakan
koordinat obyek hasil perubahan. Transformasi model diimplementasikan dengan matrik 4 X 4, dan dasar-dasarnya akan dijelaskan pada Lampiran A.
Untuk menampilkan gambar dibutuhkan kamera, dan hanya model yang terlihat oleh kamera saja yang akan ditampilkan. Untuk memfasilitasi proyeksi dan clipping, kamera dan semua model diubah sedemikian rupa dengan transformasi sudut pandang. Tujuan transformasi sudut pandang adalah meletakkan kamera pada asal dan bidikannya, serta terlihat dari arah sumbu Z, dengan sumbu Y mengarah ke atas dan sumbu X ke arah kanan.
Gambar 2.3 menunjukkan bagaimana penempatan kamera dan perpindahan model pada tahap ini.Gambar 2.3 transformasi sudut pandang2.2.2.2 PENCAHAYAAN
Untuk menampilkan tampilan yang mirip dengan kenyataan, pemandangan perlu dilengkapi dengan satu atau lebih sumber cahaya. Beberapa kasus mungkin tidak memasukkan pencahayaan dalam geometri karena mungkin model obyek telah dilengkapi warna tiap vertex atau teksture yang menempel padanya. Untuk model yang masih memerlukan sumber cahaya, perhitungan cahaya digunakan untuk menghitung warna tiap vertex. Persamaan yang digunakan menggunakan perhitungan dalam dunia nyata yaitu perhitungan perkiraan photon dan permukaan benda.
2.2.2.3 PROYEKSI
Setelah pencahayaan, sistem rendering dilanjutkan dengan pembuatan proyeksi yang mengubah ukuran tampilan menjadi sebuah kubus dengan T T T titik tertinggi ( 1 1 1) dan (-1 -1 -1) (operator v = bentuk transformasi dari vektor v). Unit kubus tersebut dinamakan
canonical view volume. Dasar dari proyeksi ada dua yaitu metode orthographics dan metode prespective yang keduanya bisa diperoleh melalui
matrik 4 x 4. Ciri khas dari orthographics adalah garis paralel masih tetap paralel setelah perubahan. Proyeksi prespective lebih rumit, karena bagian jauh obyek yang tergaris dari kamera, menghasilkan gambar yang lebih kecil. Walaupun perubahan pada bagian ini mengubah isi, proses ini disebut proyeksi karena setelah ditampilkan koordinat-Z tidak ditampilkan pada ini model diproyeksikan dari 3-dimensi menjadi 2-dimensi. Bentuk perhitungannya dijelaskan pada Lampiran B. Gambar 2.4 memperlihatkan perbedaan antara proyeksi orthographics dan proyeksi prespective.
Gambar 2.4 proyeksi2.2.2.4 CLIPPING
Hanya keseluruhan ataupun sebagian obyek yang terdapat dalam view
volume saja yang akan dilanjutkan ke proses rasterisasi atau digambarkan ke
layar. Jika obyek hanya sebagian saja dalam view volume maka diperlukan proses clipping. Clipping akan membuang bagian luar dari unit kubus dan membuat vertex baru pada bagian pinggir unit kubus.
Gambar 2.5 memperlihatkan bagaimana cara kerja proses Clipping.Gambar 2.5 Clipping2.2.2.5 SCREEN MAPPING
Hanya obyek hasil dari proses clipping saja yang akan melewati proses
screen mapping. Obyek-obyek tersebut masih mempunyai koordinat 3- Dimensi, koordinat X dan koordinat Y diubah ke dalam koordinat layar.
Sedangkan koordinat Z ( -1 ? Z ? 1) disimpan untuk proses rasterisasi.
Gambar 2.6 memperlihatkan cara kerja screen mapping.Gambar 2.6 Screen mapping2.2.3 RASTERISASI
Tujuan dari proses rasterisasi atau sering disebut scan conversion adalah memberikan warna yang benar kepada piksel untuk dirender dengan menggunakan vertex yang telah diolah dan diproyeksikan, beserta warna dan koordinat teksture dari proses geometri sebelumnya. Berbeda dengan proses geometri yang mengolah tiap-tiap vertex atau polygon, rasterisasi menangani operasi tiap piksel. Proses ini mengubah dari vertex 2-Dimensi menjadi piksel ke dalam layar monitor dengan nilai-Z (nilai kedalaman), warna, dan mungkin koordinat teksture yang disertakan pada tiap vertex.
2.3 SUMBER CAHAYA
Lighting atau pencahayaan adalah istilah yang digunakan untuk menandakan
interaksi antara material dan sumber cahaya. Lighting bisa berupa warna, teksture, atau transparansi. Semua elemen tersebut dikombinasikan menjadi dihitung menggunakan lighting model. Untuk tujuan real time graphics, umumnya lighting model dibagi menjadi tiga bagian penting yaitu komponen
diffuse, komponen specular, dan komponen ambient.
2.3.1 KOMPONEN DIFFUSE
Sinar diffuse datang dari satu arah, sehingga lebih terang jika datangnya secara tepat jatuh pada permukaan, dibandingkan jika hanya sekilas pada permukaannya. Sekali menyentuh permukaan, sinar berpencar sama ke semua arah, maka sinar terlihat terang, tidak masalah dari mana mata memandang. Sinar-sinar yang datang dari posisi atau arah khusus kemungkinan mempunyai komponen diffuse. Gambar 2.7 menunjukkan hubungan antara sinar (l) dan normal (n).
Gambar 2.7 komponen diffuseModel sinar ini mendekati kenyataan dan melibatkan interaksi photon dan permukaan benda. Efek ini mempunyai nilai sebagai berikut.
リ i diff = n . l = cos Nilai intensitas diffuse ( i diff ) ditentukan oleh nilai cosinus antara permukaan normal n dan vektor sinar l yang bersinar dari titik permukaan P ke sumber cahaya. Sebagai contoh nilai intensitas diffuse bernilai 0 jika sudut リ bernilai kurang dari π/2. Dalam kenyataannya permukaan material atau obyek mempunyai warna tersendiri ( m diff ) serta sumber cahaya juga mempunyai warna tersendiri ( s diff ).
Faktanya adalah sudut リ bernilai kurang dari π/2, maka persamaannya : Rumus intensitas diffuse tersebut mengandung perkalian komponen vektor sinar dan material.
Contohnya sebuah sinar mempunyai warna biru s diff = ( 0.0 0.0 1.0 ) , dan material berwarna merah m diff = ( 1.0 0.0 0.0), maka perkalian keduanya menghasilkan (0.0
0.0 0.0). Kesimpulannya permukaan dengan warna merah tidak bisa memantulkan warna biru.
2.3.2 KOMPONEN SPECULAR
Sinar specular datang dari arah khusus, dan cenderung untuk memantulkan permukaan dalam arah yang berlebihan. Sinar laser dengan kualitas baik akan menghasilkan pantulan specular hampir 100%. Besi yang mengkilap atau plastik mempunyai komponen specular yang tinggi, kapur atau karpet hampir tidak mempunyainya. Specular bisa disebut juga kilapan atau kilauan. Gambar 2.8 memperlihatkan hubungan antara normal (n), normalisasi vektor (h), vektor menuju mata (v).
Gambar 2.8 Komponen specularModel yang digunakan untuk menghitung intensitas cahaya specular biasanya menggunakan perhitungan cahaya phong.
mshi mshi
i spec = ( n . h ) = (cos リ)
Dalam perhitungan ini, digunakan parameter m shi yang merupakan parameter kecemerlangan, normal ( n ) dan normalisasi vektor ( h ) antara vektor v yang memantulkan cahaya ke mata dan vektor sinar l.
Seperti dalam komponen diffuse, terdapat parameter lain yaitu material m spec spec dan sumber cahaya s . Selain itu jika sudut antara n dan h lebih dari π/2 maka kontribusi nilai specular bernilai 0.
2.3.3 KOMPONEN AMBIENT
Komponen ambient adalah sinar yang datang dari sumber yang menyebar luas oleh lingkungan yang arahnya tidak bisa ditentukan (seperti datang dari semua arah). Sinar dalam kamar mempunyai komponen ambient yang banyak, karena kebanyakan sinar terpantul beberapa kali sebelum terpantul ke mata. Lampu pijar yang berada diluar ruang, mempunyai komponen
ambient yang kecil, misalnya lampu pengatur lalu lintas melewati arah yang
sama dan kecil kemungkinan sinar mencapai mata setelah terpantul beberapa benda. Ketika sinar ambient mengenai permukaan, sinar menyebar sama ke semua arah. Perhitungan nilai intensitas nilai ambient hanya melibatkan material dan sumber cahaya.
2.3.4 PERHITUNGAN KOMPONEN-KOMPONEN
Nilai lighting keseluruhan yang dipakai adalah penjumlahan ketiga komponen tersebut ( i = nilai intensitas cahaya).
i tot = i amb + i diff + i spec
Dalam kenyataannya sinar yang jauh akan mengalami pelemahan, begitu juga dengan dengan sinar yang terarah seperti komponen diffuse dan komponen specular. Faktor yang melemahkan sinar disebut attenuation. Faktor attenuation (d) dipengaruhi oleh posisi sumber sinar cahaya ( s pos ), titik yang dituju oleh sinar cahaya ( P ), nilai attenuation konstant ( s c ), nilai l q attenuation linear ( s ), nilai attenuation kuadrat ( s ).
Nilai lighting keseluruhan juga akan terpengaruhi oleh faktor attenuation maka persamaannya akan berubah :
i tot = i amb + d ( i diff + i spec )
Selain sumber sinar yang terarah, terdapat jenis sinar lain yang mirip titik tetapi memancarkan sinar seperti kerucut yang disebut sumber sinar spot.
Sumber sinar ini memancarkan beberapa sinar berbeda-beda tergantung arah dan sudut sinar dengan sinar utamanya. Terdapat parameter yang mewakili spot spot ini yaitu c . Jika tidak ada sumber sinar spot, maka nilai c adalah 1. Jika c spot bernilai 0 maka terdapat sumber sinar c spot yang tidak mengenai vertex.
i tot = c spot ( i amb + d ( i diff + i spec ))
Masih ada nilai lain yang akan dihitung dalam perhitungan ini yaitu sinar emi
emitted (m ) yang berada pada obyek dan tidak terpengaruh oleh sumber
cahaya. Dalam OpenGL ataupun Direct3D juga terdapat parameter lain antara lain ambient global (a glob ) yang merupakan cahaya latar belakang secara keseluruhan. Ambient global digunakan berpasangan dengan material ambient. Rumus di atas merupakan rumus untuk sebuah sinar. Jika ada terdapat banyak sinar maka persamaan adalah sebagai berikut :
2.4 PEMBUATAN MODEL
Vertex adalah sebuah titik pada alam 3-Dimensi. Triangle atau Segitiga
adalah polygon dengan tiga sudut dan selalu cembung. Quadrilateral atau
quad atau segiempat adalah polygon dengan empat sudut. Polygon adalah
sebuah permukaan bidang yang dibatasi oleh sudut dari vertek. Setiap segitiga dari triangle mesh atau segiempat dari quadrilateral mesh adalah
polygon. Gambar 3.9 memperlihatkan hubungan antara normal dan polygon.
normal
Gbr.2.9
Normal adalah tiga komponen dari persamaan yang menjelaskan siku atau arah 45 ー dari sebuah permukaan. Untuk membuat normal sebuah vektor, bagi setiap komponen dengan akar kuadrat dari penjumlahan dari masing- masing kuadrat. Jika normal adalah sebuah vektor dari hasil vektor asalnya ke titik berikutnya (nx', ny', nz'), maka vektor tersebut mempunyai nilai 2 2 2 factor = sqrt(nx + ny + nz ) nx' = nx / factor ny' = ny / factor nz' = nz / factor Pembuatan model antara lain dengan sistem RAW atau terstruktur yaitu memasukkan polygon sesuai dengan urutannya. Misal untuk polygon segitiga maka dituliskan koordinat X1, Y1, Z1 kemudian X2, Y2, Z2 kemudian X3, Y3, Z3 dan diulang lagi untuk polygon selanjutnya. Segitiga
strips hanya menjabarkan sekali koordinat X1, Y1, Z1, X2, Y2, Z2, X3, Y3,
Z3, kemudian dilanjutkan polygon selanjutnya dengan X4, Y4, 54 dimana dua titik lainnya adalah X2, Y2, Z2, X3, Y3, Z3 dan polygon terusnya adalah X5, Y5, Z5 dimana titik lainnya adalah X3, Y3, Z3 dan X4, Y4, 54. Segitiga fan sama dengan segitiga strip tetapi untuk tiap polygon terdapat X1, Y1, Z1 sebagai titik pusat sehingga hasilnya membentuk seperti kipas atau fan.
Segitiga strips atau fan adalah teknik polygon primitif untuk percepatan yang dahulu populer, tetapi sekarang terdapat polygon mesh yang didukung baik oleh OpenGL dan Direct3D. Kecenderungannya sekarang untuk percepatan grafika adalah mengambil keuntungan dari mesh sebanyak mungkin untuk menambah kecepatan render. Perbedaan mendasar adalah strips dan fans mengijinkan beberapa pemakaian bersama data, mesh mengijinkan pemakaian bersama secara penuh.
Polygon mesh terdiri dari daftar vertex dan sebuah set garis bentuk ( segitiga
atau segiempat ) sering disebut dengan face. Setiap vertex terdiri dari posisi dan tambahan data seperti warna diffuse, warna specular, normal, koordinat teksture dan tanda pinggir. Setiap set garis bentuk mempunyai daftar indeks angka cacah mulai 0 sampai n – 1, dimana n adalah jumlah vertex dan angka tersebut menunjuk pada sebuah vertex dalam daftar. Gambar 2.10 memperlihatkan hubungan antara mesh, face, dan vertex.
Gambar 2.10 mesh polygon2.5 OPENGL OpenGL adalah program antar muka untuk perangkat keras grafika.
Program ini terdiri sekitar 120 perintah nyata yang dapat digunakan untuk menetapkan obyek dan operasi yang dibutuhkan untuk memperoleh aplikasi 3-Dimensi secara interaktif.
OpenGL didesain untuk bekerja efektif terutama dalam jaringan komputer dengan menggunakan perintah gambar OpenGL. Selain itu OpenGL juga didesain sebagai pemersingkat, antar muka yang bebas untuk dapat diterapkan pada banyak jenis perangkat keras yang berbeda. Untuk mencapai kualitas, OpenGL tidak mempunyai perintah untuk membentuk tugas
windows atau masukan data. Meskipun begitu, pemakai tetap harus bekerja
melalui apa yang sistem window mengontrol perangkat keras yang digunakan. OpenGL tidak menyediakan perintah tingkat tinggi untuk menjelaskan model obyek tiga dimensi, seperti perintah yang mengijinkan untuk membentuk model khusus yang relatif sulit misalnya bagian tubuh, mobil, pesawat, atau molekul. OpenGL hanya dapat membuat model obyek dari bentuk primitif seperti titik, garis dan polygon.
2.5.1 SEJARAH OPENGL
OpenGL adalah perkembangan dari API program 3-Dimensi IRIS GL yang dibuat oleh perusahaan Silicon Graphics Inc. (SGI) pada tahun sekitar akhir 1980-an. Tujuan awalnya API ini adalah mengembangkan aplikasi citra seperti CAD dan animasi. Sampai sekarang terdapat lebih dari 1500 aplikasi yang menggunakan IRIS GL untuk proses rendering. Kekurangan dari IRIS GL adalah hak kepemilikannya pada batasan sistem window yang membuat pengubahan kode sulit meski menggunakan produk dari SGI sendiri.
Pada tahun 1992 SGI memperkenalkan API 3-Dimensi baru bernama Open
OpenGL mengijinkan penggambaran 3-Dimensi tanpa menggunakan batasan sistem window. API OpenGL menggunakan nama unik dimana semua perintah diawali huruf kecil “gl” (glColor, glEnable) dan tipe data diawali huruf besar “GL” (GLfloat, Gldouble).
Selama beberapa tahun, industri grafika menggunakan OpenGL ketika industri game masih menggunakan perangkat keras DOS tanpa kartu grafik akselerasi. SGI membuat badan untuk menangani kemajuan API bernama OpenGL Architecture Review Board (ARB) termasuk didalamnya perusahaan SGI, nVIDIA, ATI, Matrox, 3Dlabs dan lain-lain. Anggota ARB beberapa kali dalam setahun membahas bagaimana API yang diinginkan. Pada tahun pertengahan 1990, perangkat keras akselerasi merosot harga jualnya dan kartu akselerasi video mulai dijual dengan kemampuan khusus library dari perusahaannya saja yang dapat diakses. Windows 95 dan NT4 mengatasi perkembangan ini dengan menambah perangkat lunak yang mendukung OpenGL. Pada tahun 1995 Brian Paul membuat API 3-Dimensi bernama Mesa yang merupakan implementasi open source dari OpenGL. Ketika Mesa mulai dibuat, Brian Paul mendapat ijin dari SGI untuk menggunakan struktur perintah dari OpenGL. Karena Mesa tidak secara resmi berhubungan dengan SGI maka tidak ada garansi bahwa kode program dapat bekerja secara sempurna.
Pada tahun 1996 pengembang game id software mengeluarkan tiga program
Dimensi pada industri game. Tiga patch tersebut antara lain Verite Quake, Rendition Quake, dan GL Quake yang menggunakan OpenGL. Quake adalah game pertama yang menggunakan kelebihan perangkat keras akselerasi secara penuh dan permasalahannya adalah sedikit kartu grafik yang mendukung rendering OpenGL. Kartu grafis pendukung OpenGL pertama yang dijual untuk konsumen umum adalah 3DFX Voodoo atau seri Voodoo dari perusahaan Interactive. Sejak saat itu penggunaan kartu grafis mulai diterima konsumen umum dan perusahaan kartu grafis lainnya mulai membuat kartu yang diberi label mendukung GL Quake. 3DFX juga membuat API 3-Dimensi sendiri bernama GLIDE Pada tahun 1998, Microsoft memperkenalkan API 3-Dimensi yang disebut Direct3D yang dimasukkan dalam komponen multimedia DirectX. Karena kepopuleran GL Quake, banyak software yang memakai mesin Quake untuk membuat game dan menjadikannya standar untuk grafik game komputer. Setelah beberapa tahun, perkembangan OpenGL masih tetap sedangkan Direct3D semakin populer dan menjadi standar untuk perkembangan game.
Kelebihan OpenGL ada pada pengembangan grafika CAD dan sifatnya yang dapat berjalan pada banyak sistem operasi. Sebagai perbandingan, Glide hanya mendukung Windows dan GNU atau linux dan sekarang sangat jarang dipakai. Direct3D hanya mendukung Windows dan mesin video game Xbox.
OpenGL dapat mendukung Windows, GNU linux, Mac OS, UNIX, AIX, HP- UX, FreeBSD, NEXTstep, OPENstep, OS/2, BeOS dan Playstation 2
Pada Juli 2002 OpenGL mengeluarkan versi 1.04 yang diikuti dengan Mesa versi 5 yang dikenalkan pada Oktober 2002. Kedua API ini mempunyai kemampuan yang sama. Baik OpenGL dan Mesa mendukung rendering oleh perangkat keras akselerasi yang berarti kartu grafis dapat melakukan perhitungan yang biasanya dihitung oleh CPU. Jika tidak ada perangkat keras akselerasi maka perhitungan akan dilakukan oleh CPU. Contohnya pada proses memutar obyek dan perubahan ukuran, prosesor menghitung dan kemudian menggambar obyeknya. Proses tersebut akan memperlambat proses rendering karena CPU membuang waktu karena ada operasi lain juga memerlukan perhitungan seperti AI, suara, dan lain-lain.
2.5.2 PEMAKAIAN OPENGL
API OpenGL dibagi menjadi 3 bagian antara lain
1 Fungsi-fungsi yang didefinisikan oleh OpenGL yang sama seperti ditetapkan pada OpenGL Architecture Review Board yaitu yang berada pada library opengl32.dll dengan file header gl.h. Fungsi dari library ini berawalan kata gl.
2 Fungsi-fungsi yang ada pada OpenGL Utility Library (GLU) atau glu32.dll dengan file header glu.h. Library ini berisi beberapa fungsi yang membuat tugas lebih mudah seperti pembuatan matrik, pembuatan polygon dan rendering permukaan. Library ini sebenarnya dibuat menggunakan perintah OpenGL yang kemudian digaransikan dapat bekerja dalam semua sistem yang mendukung OpenGL. Fungsi- fungsi ini berawalan kata glu.
3 Fungsi-fungsi yang ada dalam Auxiliary (bantuan) atau AUX yang ada pada library glaux.lib dengan file header glaux.h. Fungsi yang ada di sini bukan merupakan bagian dari yang ditetapkan OpenGL, tetapi karena library bantuan ini menyediakan kerangka kerja yang bebas untuk memanggil fungsi OpenGL. Library ini berasal dari SDK Win32 dan fungsi-fungsinya berawalan aux.
Library AUX digunakan hanya di sistem operasi Windows dan untuk sistem operasi lain digunakan library yang berbeda. Pada X-Window, library bantuan yang digunakan adalah OpenGL Extension to the X Window System (GLX). Microsoft Windows menggunakan WGL yang hanya bisa menggambar pada satu buah jendela dan dengan bantuan library AUX dapat membuat banyak jendela seperti menu, kotak dialog dan lain-lain. IBM OS/2 digunakan Presentation Manager to OpenGL interface (PGL).
OpenGL juga mempunyai alat bantu yang bisa menyembunyikan kerumitan pemrograman windows yaitu OpenGL Utility Toolkit (GLUT) yang dibuat Mark Kilgard. Selain itu juga terdapat Open Inventor yang merupakan alat bantu berorientasi obyek yang menyediakan obyek dan metode untuk menciptakan grafik 3-Dimensi.
Visual C++ adalah bahasa pemrograman C++ versi Microsoft. Bahasa C++ berkembang berdasar pada bahasa pemrograman C yang berevolusi lebih lanjut dan mendukung pemrograman berorientasi obyek.
Untuk membuat jendela pada sistem operasi Microsoft Windows terdapat 4 bagian yang harus dilewati karena Windows mempunyai API tersendiri.
Bagian-bagian tersebut antara lain:
1 Menentukan dan mendaftar class Windows Hal yang dilakukan adalah menentukan headernya windows.h yang mencakup semua fungsi, struktur, konstanta API WIN32.
Selanjutnya pendeklarasian fungsi WndProc untuk penanganan pesan (message handler) utama dan fungsi utamanya yaitu fungsi WinMain dengan pengembalian integer.
2 Pembuatan Windows Dua hal utama yang dilakukan disini adalah mendefinisikan class Windows dan pembuatan jendela Windows sebenarnya.
3 Looping pesan dari Windows Ketika aplikasi berjalan, aplikasi tersbut terus menerus mendapat pesan dari program Windows. Pesan tersebut kemudian dikirim ke antrian pesan. Keika aplikasi siap memproses pesan berikutnya maka aplikasi akan memanggil pesan GetMessage yang akan memanggil pesan dari antrian ke bentuk struktur MSG dan kemudian diubah dan diproses oleh penanganan pesan (message handler). Agar aplikasi selalu berjalan dan memproses semua pesan maka dibuat loop sampai pemakai menghentikan aplikasi.
4 Pembuatan penanganan pesan atau message handler Message handler yang telah didefinisikan di langkah awal adalah fungsi yang menangani semua pesan yang dikirim ke aplikasi Windows. Ketika pemakai menekan tombol atau menggerakkan mouse, pesan akan terkirim ke aplikasi. Ketika hal tersebut terjadi ada pilihan untuk memprosesnya atau membiarkannya sesuai dengan yang telah ditentukan pembuat aplikasi tersebut. Gambar 2.11 memperlihatkan bagaimana proses pembuatan Windows pada API Win32.
Gambar 2.11 Proses pembuatan jendela WindowsBAB III ANALISA MASALAH
3.1 SHADING
Shading adalah proses dari perhitungan pembuatan cahaya dan menentukan
warna pikselnya. Ada tiga tipe utama shading yang sering digunakan yaitu
flat, gouraud dan phong yang kesemuanya merespon perhitungan cahaya