BAB III PERANCANGAN SISTEM
Analisa Identifikasi Permasalahan Dalam
mengembangkan
aplikasi
berbasis
tiga
A
3.1.
dimensi
pihak
AY
pengembang biasanya memerlukan suatu alat (tool) yang dapat berupa API yang berfungsi untuk menghubungkan antara perangkat lunak yang dikembangkan
AB
dengan perangkat keras untuk mengolah data tiga dimensi yang diinginkan. API tersebut merupakan kumpulan interface atau perintah untuk menjalankan hal-hal yang dibutuhkan dalam melakukan pengolahan data tiga dimensi yaitu antara lain:
R
enumerasi device rendering, pengaturan tampilan, mengolah data primitif tiga
SU
dimensi, menghitung posisi model, menampilkan gambar ke layar, memproses file tekstur, dan sebagainya.
API tersebut dari awal ditujukan sebagai antarmuka (interface) untuk
M
perangkat grafis tiga dimensi. Dengan demikian tahapan-tahapan dalam
O
pengolahannya menyesuaikan urutan proses yang panjang dalam hardware grafis tiga dimensi tersebut. Contohnya pada gambar tahapan proses pada API Direct3D
ST
IK
(Direct3D Graphics Pipeline) dibawah ini:
Gambar 3.1. Direct3D Graphics Rendering Pipeline [Sumber: http://www.viznet.ac.uk/files/d39pipeline.gif Time Download: 15/01/2013 14:38:10]
33
34
Berdasarkan gambar diatas prosedur pipeline dimulai dari membuat data primitif (primitive data) berupa titik, garis, segitiga dan poligon serta mendefinisikan data verteks (vertex data) beserta parameternya sesuai kebutuhan.
A
Setelah itu tesselator unit akan mengkonversi urutan dari atas ke bawah data
AY
primitif, displacement maps, dan mesh patches ke lokasi verteks lalu menyimpan
lokasi tersebut ke dalam verteks buffer dan proses ini dinamakan Tesselation. Kemudian pada tahapan Vertex Processing transformasi data Direct3D
AB
diaplikasikan ke verteks yang kemudian disimpan di verteks buffer. Selanjutnya
tahap Geometry Processing akan melakukan beberapa proses yang meliputi
R
clipping, backface culling, evaluasi atribut, dan rasterization yang kemudian
SU
digunakan pada verteks yang sudah ditransformasikan. Tahapan Pixel Processing akan melakukan operasi pixel shader menggunakan data geometri untuk memodifikasi input nilai verteks dan data tekstur sehingga menghasilkan output
M
berupa nilai warna pixel (pixel color values). Dan terakhir pada tahapan Pixel Rendering merupakan proses rendering akhir yang memodifikasi warna pixel
O
dengan nilai alpha, depth (kedalaman), stencil testing, blending dan fog lalu
IK
semua hasil nilai pixel akan ditampilkan ke output display (layar). Tahapan-
tahapan pipeline grafis tersebut harus dilalui untuk menghasilkan gambar tiga
ST
dimensi sekecil apapun agar dapat di proses ke dalam layar. Berdasarkan penjelasan diatas maka pengembang akan sulit untuk
mengembangkan aplikasi berbasis tiga dimensi dikarenakan oleh proses yang panjang dan kompleks dari prosedur tahapan-tahapan pipeline grafis dari API. Permasalahan lainnya adalah banyaknya fungsi-fungsi teknis yang rumit pada API seperti fungsi persiapan device beserta parameternya, pengaturan tipe data
35
verteks, pengaturan buffer-buffer untuk perangkat grafis tiga dimensi dan sebagainya. API grafis tiga dimensi juga memiliki keterbatasan yaitu kurangnya dukungan algoritma-algoritma untuk efisiensi dan efektifitas dalam proses
A
rendering, dan perhitungan matematika dalam mengolah data tiga dimensi. Serta tidak adanya manajemen untuk mengelola sumber daya yang saling terintegrasi
perangkat keras grafis tiga dimensi yang disediakan.
AY
antara perangkat lunak yang dikembangkan oleh pihak pengembang dengan
AB
Untuk mengatasi permasalahan diatas maka perlu dirancang suatu sistem
framework rendering engine yang membantu pihak pengembang dalam mengembangkan aplikasi berbasis tiga dimensi yang diinginkan. Konsep
R
framework dinilai dapat sangat bermanfaat untuk pengembangan aplikasi karena
SU
fungsi dan perintah dari API grafis seperti Direct3D berserta algoritma-algoritma dan perhitungan matematika akan dikelompokkan ke dalam modul-modul subsistem yang saling terintegrasi antara satu dengan yang lain. Kemudian akan
M
menyediakan class-class yang berisi perintah dan fungsi-fungsi yang hanya
O
dibutuhkan oleh pihak pengembang untuk membuat suatu aplikasi berbasis tiga dimensi. Sedangkan rendering engine berfungsi sebagai manjemen pengelolaan
IK
sumber daya dari aplikasi yang dibuat ketika ditampilkan di layar (secara realtime). Rendering engine juga melakukan fungsi-fungsi tertentu (khusus)
ST
seperti enumerasi adapter grafis, mengolah data dan model tiga dimensi, berkomunikasi dengan kartu grafis, mengelola memory (buffer), melakukan
komputasi perhitungan matematika dan pekerjaan-pekerjaan tingkat rendah lainnya. Selain itu pada framework rendering engine ini menggunakan teknologi SIMD atau perhitungan matematika cepat dengan bantuan hardware seperti MMX
36
dan SSE untuk mengolah komputasi algoritma dan perhitungan matematika. Dengan adanya framework rendering engine tersebut pihak pengembang akan lebih mudah mengelola dan menjalankan aplikasi berbasis tiga dimensi yang
Algoritma Manajemen Scene
AY
3.2.
A
dikembangkannya sesuai dengan yang diharapkan.
Dalam proses rendering algoritma manajemen scene merupakan instrumen
yang sangat penting jika ingin menampilkan menampilkan lebih dari ratusan ribu
AB
polygon segitiga yang membentuk obyek-obyek 3D ke dalam layar. Hal ini dikarenakan keterbatasan dari pengolahan yang dapat dilakukan oleh kartu grafis
R
yang ada saat ini. Algoritma tersebut membantu memilih polygon yang diperlukan
SU
terhadap lokasi dan orientasi tertentu dari penonton agar dapat dikeluarkan dari seluruh anggota ratusan ribu lebih polygon dari scene. Karena kebanyakan dari polygon tersebut tidak terlihat oleh user. Metode algoritma manajemen scene
O
Tree.
M
yang akan digunakan oleh framework rendering engine ini adalah Octree dan BSP
3.2.1. Algoritma Octree
IK
Octree merupakan salah satu algoritma manajemen scene yang umumnya
digunakan untuk area outdoor. Algoritma tersebut akan membagi menjadi 8
ST
kelompok simpul kecil dari kelompok polygon secara rekursif, yang kemudian dapat diuji persimpangannya dan melakukan traversal agar dapat ditampilkan pada layar. Berikut adalah pembuatan algoritma Octree berdasarkan inputan polygon.
37
Mulai
Buat obyek Octree
R
AB
Daftarkan polygon & jumlahnya ke dalam Octree
AY
A
Load seluruh polygon
SU
Set Octree menjadi Root
ST
IK
O
M
Kalkulasi Bounding Box Root
Cek apakah jumlah polygon > 10
Tidak
Ya
Rekursif Pembuatan Child
Inisialisasi Child berdasarkan ID dan Parentnya sebanyak 8 bagian
Proses memisahkan polygon berdasarkan Bounding Box Child
Gambar 3.2 Flowchart Pembuatan Algoritma Octree
Selesai
38
Berikut adalah penjelasan langkah-langkah pembuatan algoritma Octree: 1. Pertama-tama diawali dengan seluruh memuat (load) seluruh polygon baik yang berasal dari file atau sumber lainnya (data polygon disimpan menjadi
A
pointer array TumozPolygon). 2. Proses selanjutnya adalah membuat obyek Octree yang ditujukan untuk
AY
membangun tree baru berdasarkan polygon yang ada.
3. Polygon-polygon yang telah di muat kemudian didaftarkan pada Octree
AB
yang baru dibuat dan juga memasukkan jumlahnya sebagai parameter.
4. Octree yang baru dibuat tersebut kemudian dijadikan root (simpul akar) atau parent (simpul induk) dari tree (diagram pohon). Hal ini dilakukan
R
agar menjadi acuan bagi semua child (simpul anak).
SU
5. Setelah di atur menjadi root, maka dilanjutkan dengan proses mengkalkulasi bounding box root tersebut. Setiap obyek simpul di dalam Octree harus mengkalkulasikan bounding boxnya (menggunakan AABB)
M
agar nanti dapat dikelompokkan berdasarkan posisisnya dan untuk
O
mengetahui ruang lingkup dari tiap simpul. 6. Setelah itu melakukan pemeriksaan jumlah anggota simpul yaitu polygon-
ST
IK
polygon yang telah didaftarkan, apabila melebihi batas jumlah yang
ditentukan maka akan dilanjutkan ke proses selanjutnya (sistem ini memberikan batas 10 polygon per simpul). Dan jika sebaliknya maka akan menjadi simpul daun (leaf) sehingga proses pembuatan child akan diakhiri.
7. Root atau parent akan di bagi menjadi 8 child dan melakukan proses inisialisasi. Inisialisasi tersebut merupakan proses pemberian ID untuk masing-masing child, lalu mengkalkulasi ulang bounding box berdasarkan
39
posisinya, serta menyimpan data parentnya. Kedelapan ID atau Posisi dari child tersebut adalah Timur Laut Atas (UP_NE), Barat Laut Atas (UP_NW), Tenggara Atas (UP_SE), Barat Daya Atas (UP_SW), Timur
A
Laut Bawah (LW_NE), Barat Laut Bawah (LW _NW), Tenggara Bawah (LW _SE), dan Barat Daya Bawah (LW _SW).
AY
8. Apabila child telah diinisialisasi maka dilanjutkan dengan proses
memotong atau mengelompokkan polygon-polygon berdasarkan ruang
AB
lingkup bounding box dari child tersebut. Setelah selesai maka akan
dilakukan proses rekursif kembali ke langkah ke 6, dan menjadikan child tersebut menjadi root atau parent bagi child dibawahnya secara terus
R
menerus sampai memenuhi kondisi dimana jumlah polygon tidak melebihi
SU
batas yang telah ditentukan yaitu 10 polygon pada langkah ke 6.
3.2.2. Algoritma BSP Tree
M
Berbeda dengan Octree, BSP Tree (Binary Space Partitioning Tree) merupakan algoritma manajemen scene yang sangat efektif digunakan untuk area
O
indoor. Prinsip dari BSP Tree adalah membagi menjadi 2 kelompok simpul kecil
IK
dari kelompok-kelompok polygon secara rekursif. Dan hampir sama dengan Octree hasil dari BSP Tree tersebut dapat diuji persimpangannya dan juga dapat
ST
melakukan traversal ke dalam simpul-simpul agar dapat ditampilkan ke layar. Berikut adalah pembuatan algoritma BSP Tree berdasarkan inputan polygon.
40
Mulai
A
Load seluruh polygon
AB
Daftarkan polygon & jumlahnya ke dalam BSP Tree
AY
Buat obyek BSP Tree
SU
R
Set BSP Tree menjadi Root & Parent = NULL
O
M
Kalkulasi Bounding Box simpul ini
ST
IK
Rekursif Front & Back Child
Splitter terbaik ditemukan?
Tidak
Ya
Membuat obyek child baru BSP Tree Front dan Back
Mengklasifikasikan kelompok polygon dan mendaftarkan ke Front dan Back Child
Gambar 3.3 Flowchart Pembuatan Algoritma BSP Tree
Selesai
41
Berikut adalah penjelasan langkah-langkah pembuatan algoritma BSP Tree: 1. Seluruh polygon baik yang berasal dari file atau sumber lainnya di muat terlebih dahulu sebagai inputan (biasanya disimpan menjadi pointer array
A
TumozPolygon). 2. Membuat obyek BSP Tree yang ditujukan untuk membangun tree baru
AY
berdasarkan polygon yang ada atau polygon yang di muat sebelumnya.
3. Polygon-polygon yang telah di muat tersebut kemudian didaftarkan pada
AB
BSP Tree yang baru dibuat dan sekaligus memasukkan jumlahnya sebagai parameter.
4. BSP Tree yang di buat tersebut kemudian dijadikan simpul root dan
R
simpul parent di set menjadi NULL yang menandakan bahwa simpul
SU
tersebut tidak memiliki induk.
5. Pada tahapan ini merupakan awal dari proses pembuatan simpul child dan proses yang dilakukan adalah melakukan kalkulasi bounding box (AABB)
M
pada simpul ini. Tujuan dari proses tersebut adalah untuk mengetahui
O
ruang lingkup dari tiap simpul. 6. Proses selanjutnya adalah mencari splitter terbaik dari simpul ini. Splitter
ST
IK
tersebut merupakan plane pemisah yang nanti digunakan untuk memisahkan daftar polygon-polygon dari simpul ini. Berdasarkan daftar polygon yang ada splitter dapat di cari dengan cara sebagai berikut. Pertama-tama membuat perulangan pada seluruh daftar polygon ke dalam outer loop (perulangan luar). Untuk setiap iterasi dari perulangan, pilih polygon terpilih saat ini dari daftar dan asumsikan sebagai splitter. Kemudian jalankan inner loop (perulangan dalam) yang juga melakukan
42
perulangan terhadap polygon dari daftar, dan klasifikasikan masingmasing polygon terhadap polygon yang sebelumnya dianggap sebagai splitter. Hitung berapa banyak polygon yang berada di sisi depan, di sisi
A
belakang, dan berapa banyak polygon yang terpisah. Ketika inner loop selesai, hitung skor dari polygon yang seharusnya menjadi splitter dan
AY
bandingkan skor tersebut terhadap skor terbaik (terendah) yang dapat ditemukan. Dan arahkan pointer ke skor terendah karena semakin tinggi
AB
skor, maka semakin buruk polygon tersebut untuk menjadi splitter.
Apabila splitter tidak ditemukan maka proses akan menjadikan simpul ini menjadi leaf (simpul daun) dan mengakhiri proses pembuatan tree.
R
7. Setelah itu dilanjutkan dengan membuat obyek child BSP Tree baru yaitu
SU
front (simpul depan) dan back (simpul belakang) dan mengatur simpul ini sebagai parentnya.
8. Berdasarkan splitter terbaik yang telah ditemukan, maka proses
M
selanjutnya adalah mengklasifikasikan splitter tersebut terhadap daftar
O
polygon yang ada pada simpul ini. Apabila polygon ada di depan dari spliter, maka masukkan ke dalam daftar polygon dari child front. Untuk
ST
IK
yang di belakang, polygon dimasukkan ke dalam daftar polygon dari child back. Apabila polygon berpotongan dengan splitter, maka polygon di clipping (dipotong atau dibelah) dan masing-masing hasil polygon depan dan belakangnya dimasukkan ke daftar child front dan back. Dan Terakhir apabila polygon berada pada posisi splitter, maka periksa sudut antara normalnya dengan normal splitter. Jika hasil sudutnya sama dengan 0 atau positif maka normal dari polygon tersebut searah dengan normal splitter
43
dan dimasukkan ke dalam daftar polygon dari child front. Dan sebaliknya jika hasilnya negatif maka polygon tersebut dimasukkan ke dalam daftar polygon dari child back. Setelah proses klasifikasi dan pendaftaran
A
polygon selesai maka masing-masing child front dan back akan melakukan proses rekursif kembali ke langkah ke 5, dan menjadikan child tersebut
AY
menjadi parent bagi child dibawahnya secara terus menerus sampai memenuhi kondisi tidak menemukan splitter terbaik pada langkah ke 5.
Perancangan Sistem
AB
3.3.
Berdasarkan analisa identifikasi permasalahan yang telah dilakukan
R
sebelumnya bahwa Framework rendering engine ini dibangun menggunakan API
SU
Direct3D dari Microsoft DirectX SDK dan diprogram dengan bahasa pemrograman C++. Sedangkan desain sistemnya menggunakan UML dan flowchart pada masing-masing fungsi framework. Garis besar desain sistem
M
rancang bangun yang akan dibuat digambarkan seperti gambar di bawah ini:
Gunakan
ST
IK
O
Static Library Tumoz3D.lib untuk Matematika & Algoritma 3D
Aplikasi Berbasis 3D
Buat Obyek
Gunakan
Gunakan
Render Interface
Implemen
Gunakan
Static Library TumozGeneral.lib untuk Kontrol Pergerakan, Kamera dsb
Beri Device
Static Library TumozRenderer.lib untuk interface Sistem Rendering
Load
Dynamic Library TumozD3D.dll untuk implementasi Sistem Rendering
Gambar 3.4. Gambaran Umum Rancang Bangun Sistem
Gunakan
44
Pada gambar diatas sistem dijelaskan menjadi beberapa tahapan sebagai berikut: 1. Pihak developer yang mengembangkan aplikasi berbasis 3D dapat
TumozRenderer.lib, Tumoz3D.lib, dan TumozGeneral.lib.
A
menggunakan tiga library yang disediakan dari framework ini antara lain
AY
2. Aplikasi pengembangan membuat obyek dari TumozRenderer.lib sebagai library utama untuk menjalankan engine. Kemudian aplikasi tersebut
AB
memberikan permintaan device yang dibutuhkan berdasarkan API.
3. TumozRenderer.lib berfungsi sebagai interface dan class abstrak sedangkan fungsi-fungsi utama rendering engine dalam melakukan
R
komunikasi dengan API berada didalam TumozD3D.dll. Dengan demikian
SU
ketika obyek dibuat pada aplikasi pengembangan secara otomatis TumozRenderer.lib memuat (load) TumozD3D.dll. 4. TumozD3D.dll melakukan implementasi pada obyek Render Device
M
sehingga fungsi-fungsinya dapat digunakan oleh aplikasi pengembangan.
O
Tugas dari render device tersebut antara lain insialisasi rendering, menentukan resolusi, penggunaan shader, melakukan proses-proses yang
ST
IK
dibutuhkan pada tahapan rendering pipeline, dan sebagainya.
5. TumozRenderer.lib dan TumozD3D.dll juga berisi 2 obyek engine tambahan yaitu TumozSkinManager dan TumozVertexCacheManager. TumozSkinManager berfungsi untuk mengelola penggunaan warna, material dan tekstur berdasarkan implementasi pada API. Sedangkan TumozVertexCacheManager berfungsi sebagai manajemen verteks dan indeks buffer dalam melakukan proses rendering.
45
6. Aplikasi
pengembangan
dapat
menggunakan
class-class
didalam
Tumoz3D.lib yang terpisah dari TumozRenderer.lib. Class-class tersebut merupakan perhitungan matematika dan algoritma yang diperlukan untuk
A
mengembangkan aplikasi berbasis 3D. 7. Selain Tumoz3D.lib aplikasi pengembangan juga dapat menggunakan
AY
library TumozGeneral.lib yang berisi class dan fungsi untuk manajemen
scene, kontrol pergerakan dan informasi yang dibutuhkan dalam proses
8. TumozD3D.dll
juga
TumozGeneral.lib
AB
rendering. menggunakan
dalam
melakukan
library
Tumoz3D.lib
perhitungan
matematika
dan dan
R
algoritma serta fungsi-fungsi yang diperlukan lainnya untuk memproses
3.4.
SU
dan menjalankan sistem rendering engine.
Class Diagram
M
Class diagram atau diagram kelas digunakan untuk menampilkan kelaskelas atau paket-paket di dalam sistem dan relasi antar mereka. Relasi antar kelas
ST
IK
O
pada Framework Tumoz Rendering Engine diilustrasikan sebagai berikut:
46
TumozD3DSkinManager
TumozRenderer
TumozD3DVCManager
(from TumozD3D)
(from TumozRenderer)
(from TumozD3D)
1
TumozSkinManager
(from TumozRenderer)
(from TumozRenderer)
TumozQuat
TumozD3D
(from Tumoz3D)
(from TumozRenderer)
dirubah ke digunakan
(from TumozD3D)
TumozD3DEnum (from TumozD3D)
digunakan
R
TumozVector
TumozPlane
(from Tumoz3D)
mengatur
(from Tumoz3D)
SU
(from Tumoz3D)
bersimpangan TumozRay
bersimpangan
(from Tumoz3D)
membagi
TumozBSPTree
bersimpangan
memotong
(from Tumoz3D)
menghitung
membatasi
M
TumozObb
O
(from Tumoz3D)
TumozAabb
IK
(from TumozGeneral)
membangun
membatasi
(from Tumoz3D)
TumozMovementController
ST
TumozD3DVCache
digunakan
mentrasformasi
TumozMatrix
1
1
(from TumozD3D)
*
AY
1 1 1 TumozRenderDevice TumozVertexCacheManager
AB
1
A
dibuat oleh
TumozPolygon (from Tumoz3D)
*
membangun membatasi
1
TumozOctree
TumozPolylist
(from Tumoz3D)
(from Tumoz3D)
TumozMCEgo
TumozTimer
TumozMCFree
(from TumozGeneral)
(from TumozGeneral)
(from TumozGeneral)
Gambar 3.5. Class Diagram Tumoz Rendering Engine
47
Gambar 3.5. menunjukkan bahwa Framework Tumoz Rendering Engine menyediakan 3 kelas abstrak utama yang berfungsi sebagai interface yaitu TumozRenderDevice, TumozSkinManager, dan TumozVertexCacheManager.
A
Implementasi dari masing-masing interface tersebut mengarah pada kelas implementasi yang mengacu pada referensi API Direct3D yaitu TumozD3D,
AY
TumozD3DSkinManager, dan TumozD3DVCManager. Karena interface tersebut
bersifat dinamis (dynamic link library) maka kelas TumozRenderer bertugas
AB
untuk membuat dan menentukan hubungan antara kelas interface dengan kelas
implementasi yang sesuai. Dan Kelas TumozD3DVCache menjadi bagian yang membentuk (agregasi) dari kelas TumozVertexCacheManager, begitu juga pada
R
kelas TumozD3DEnum yang merupakan bagian dari TumozD3D.
SU
Kelas TumozD3D menggunakan beberapa kelas untuk algoritma dan perhitungan tiga dimensinya antara lain: TumozVector, TumozMatrix, dan TumozPlane. Sedangkan kelas lainnya yang tersedia untuk perhitungan geometri
M
dan algoritma tiga dimensi adalah: TumozQuat, TumozRay, TumozPolygon,
O
TumozAabb, TumozObb, TumozBSPTree, dan TumozOctree. Juga berserta kelas TumozPolylist yang memiliki anggota dari kelas TumozPolygon.
IK
Kelas TumozVector memiliki beberapa peranan penting dalam
penggunaan algoritma dan perhitungan tiga dimensi. Salah satunya adalah kelas
ST
TumozVector merupakan dasar untuk menghitung transformasi (seperti rotasi dan pergerakan obyek tiga dimensi) pada kelas TumozMatrix. TumozVector juga digunakan untuk menghitung persimpangan (intersection) pada kelas TumozRay, TumozAabb, dan TumozObb. Pada kelas TumozPlane untuk mengatur bidang
yang akan dibentuk membutuhkan kelas TumozVector. Dan peran kelas
48
TumozVector lainnya adalah untuk membantu perhitungan geometri pada kelas TumozMovementController contohnya seperti letak kamera, sudut pandang dan sebagainya. Selain kelas TumozVector peranan penting lainnya juga terdapat pada
TumozMatrix untuk menghitung rotasi obyek tiga dimensi.
A
kelas TumozQuat yang dapat mengubah (konversi) nilai-nilai dari kelas
AY
Seperti yang terlihat pada gambar 3.5, kelas TumozMovementController mempunyai dua kelas turunan yaitu kelas TumozMCEgo dan TumozMCFree.
AB
Sedangkan kelas TumozTimer tidak memiliki relasi dengan kelas manapun, akan
tetapi TumozTimer memiliki referensi dengan library standar C++ (stdlib). Berdasarkan gambar relasi antar kelas diatas, maka selanjutnya adalah penjelasan
SU
Rendering Engine.
R
secara detil fungsionalitas dari masing-masing kelas di dalam Framework Tumoz
3.4.1. Class TumozRenderer
M
Kelas TumozRenderer mempunyai beberapa atribut dan operasi untuk menentukan jenis API yang ingin dijadikan implementasi agar dapat dibuatkan
O
obyeknya dan dihubungkan ke dalam interface. Untuk lebih jelasnya dapat dilihat
ST
IK
pada gambar 3.6.
Gambar 3.6. Class TumozRenderer
49
3.4.2. Class TumozRenderDevice Kelas TumozRenderDevice merupakan interface yang ditujukan untuk menjadi acuan (prototype) bagi kelas implementasi yang paling utama yang
A
bertugas dalam mengelola perangkat rendering. Acuan itu berupa atribut dan operasi-operasi virtual yang berhubungan dengan pengolahan perangkat rendering
AY
seperti inisialisasi perangkat grafis rendering, menjalankan dan menghentikan proses rendering, mengatur pencahayaan, membuat obyek manajer verteks dan
ST
IK
O
M
SU
R
AB
manajer skin dan sebagainya. Untuk lebih jelasnya dapat dilihat pada gambar 3.7.
Gambar 3.7. Class TumozRenderDevice
50
3.4.3. Class TumozVertexCacheManager Kelas TumozVertexCacheManager memiliki peranan yang hampir sama dengan kelas TumozRenderDevice yaitu sebagai interface yang berfungsi sebagai
A
prototype bagi kelas implementasi yang memanajemen pengelolaan hal-hal yang berhubungan dengan verteks. Operasi-operasi yang ada terdiri dari pembuatan
AY
buffer (memory penyimpanan) verteks statis dan buffer indeks, merender masing-
masing verteks baik dalam bentuk titik, garis, ataupun polygon, mengirim konten
AB
verteks dan indeks dari buffer ke perangkat rendering agar dapat di gambar, validasi kondisi atau status verteks, dan lain-lain. Untuk lebih jelasnya dapat
IK
O
M
SU
R
dilihat pada gambar 3.8.
Gambar 3.8. Class TumozVertexCacheManager
ST
3.4.4. Class TumozSkinManager Kelas TumozSkinManager juga merupakan interface yang berfungsi
sebagai prototype atau acuan bagi kelas implementasi yang memanajemen hal-hal
yang berkaitan dengan pemberian warna atau tekstur pada lapisan terluar atau
51
disebut skin (kulit) dari obyek tiga dimensi. Bentuk struktur dari kelas
SU
R
AB
AY
A
TumozSkinManager adalah sebagai berikut:
M
Gambar 3.9. Class TumozSkinManager
O
Seperti pada gambar 3.9. operasi-operasi yang tersedia pada kelas
IK
TumozSkinManager antara lain menambah dan mengganti skin atau tekstur dari obyek tiga dimensi, mengubah warna material, membandingkan warna material,
ST
dan sebagainya.
3.4.5. Class TumozD3D Kelas TumozD3D merupakan kelas implementasi paling penting dan
paling utama yang merupakan turunan dari interface TumozRenderDevice. Fungsi dari kelas ini adalah mengelola perangkat rendering dengan menggunakan
52
referensi dari API Direct3D. Kelas TumozD3D mengelola hampir seluruh proses penting yang ada di dalam Framework Tumoz Rendering Engine. Dan struktur
ST
IK
O
M
SU
R
AB
AY
A
dari kelas TumozD3D digambarkan oleh gambar di bawah ini:
Gambar 3.10. Class TumozD3D
Atribut dari kelas TumozD3D terdiri dari pointer dari obyek-obyek API
Direct3D yang berhubungan dengan perangkat rendering seperti Direct3D9, Direct3DDevice9, D3DXFont, dan lain-lain. Selain itu atribut-atribut pada kelas TumozD3D juga berisi status atau kondisi dari jalannya sistem rendering.
53
Sedangkan operasi-operasi yang ada di dalam kelas TumozD3D sama dengan operasi-operasi virtual yang ada di dalam interface TumozRenderDevice dengan tambahan fungsi-fungsi bantuan (helper function) untuk proses internal
A
contohnya fungsi OneTimeInit(), Go(), Log(), dan sebagainya.
AY
3.4.6. Class TumozD3DSkinManager
Kelas TumozD3DSkinManager adalah kelas implementasi dari interface TumozSkinManager yang menggunakan API Direct3D. Fungsi dari kelas
AB
TumozD3DSkinManager sama dengan interface TumozSkinManager yang telah
dijelaskan sebelumnya disertai dengan atribut dan operasi tambahan untuk
ST
IK
O
M
SU
R
penerapan internal sistem. Untuk lebih jelasnya dapat dilihat pada gambar 3.11.
Gambar 3.11. Class TumozD3DSkinManager
54
3.4.7. Class TumozD3DVCManager Seperti
kelas
TumozD3D
dan
TumozD3DSkinManager
bahwa
TumozD3DVCManager juga merupakan kelas implementasi API Direct3D dari
ST
IK
O
M
SU
R
AB
AY
A
interface TumozVertexCacheManager. Struktur kelasya adalah sebagai berikut:
Gambar 3.12. Class TumozD3DVCManager
55
Konsep manajemen verteks pada API Direct3D menggunakan sistem Flexible Vertex Format (FVF) sehingga bebas untuk menentukan sendiri secara fleksibel format dari verteks yang sesuai dengan kebutuhan. Akan tetapi pada
A
kelas TumozD3DVCManager hanya menyediakan 6 pilihan pada atribut format verteks yaitu:
berisi data posisi saja tanpa adanya transformasi.
AY
1. Position Untransformed Vertex (PS) adalah format verteks yang hanya
AB
2. Unstransformed and Unlit Vertex (UU) yaitu merupakan format verteks
yang berisi data posisi, vektor normal, dan koordinat tekstur. Biasanya digunakan untuk menggambarkan benda tanpa disertai efek pancahayaan.
R
3. Unstransformed and Lit Vertex (UL) yaitu merupakan format verteks yang
SU
paling umum dipakai yang berisi data posisi, warna material diffuse, dan koordinat tekstur. Benda yang digambar menggunakan format verteks ini dapat dipengaruhi oleh efek pencahayaan.
M
4. Character Animation (CA) adalah format verteks yang berisi data posisi,
O
vektor normal, dan koordinat tekstur. Biasanya digunakan untuk menggambarkan animasi karakter.
ST
IK
5. Three Texture Coordinat (3T) adalah format verteks yang berisi data posisi, vektor normal, dan 3 koordinat tekstur. Biasanya digunakan untuk
efek-efek spesial atau khusus seperti detail map, heightmap dan lain-lain.
6. Tangent Vector (TV) adalah format verteks yang berisi data posisi, vektor normal, koordinat tekstur, dan vektor tangen. Biasanya juga digunakan untuk spesial efek seperti bump mapping, dan sebagainya.
56
Fungsi dari kelas TumozD3DVCManager ini sama dengan interface TumozVertexCacheManager yaitu untuk mengelola verteks. Akan tetapi untuk mengelola verteks secara individual kelas ini dibantu oleh kelas khusus (helper
A
class) yaitu kelas TumozD3DVCache yang akan dijelaskan di bawah ini.
Kelas
TumozD3DVCache
merupakan
AY
3.4.8. Class TumozD3DVCache kelas
untuk
mengelola
sekelompok data verteks secara individual. Atribut-atribut dan operasi-operasi
AB
dari kelas ini antara lain menghubungkan verteks ke data skin seperti material dan tekstur, menambah atau menghapus data indeks dan verteks ke dalam buffer, dan
ST
IK
O
M
SU
R
sebagainya. Untuk lebih jelasnya dapat dilihat pada gambar 3.13.
Gambar 3.13. Class TumozD3DVCache
57
3.4.9. Class TumozVector Kelas TumozVector merupakan kelas terpenting dalam perhitungan geometri matematika dan algoritma tiga dimensi. Karena biasanya vektor
A
mewakili posisi dari suatu obyek tiga dimensi maka atributnya terdiri dari x, y, z, dan w. Sedangkan operasi-operasinya meliputi perhitungan panjang vektor,
AY
negasi, normalisasi, differensiasi, penambahan, pengurangan, perkalian dot
product, perkalian cross product, dan lain-lain. Untuk lebih jelasnya dapat dilihat
ST
IK
O
M
SU
R
AB
pada gambar 3.14.
Gambar 3.14. Class TumozVector
3.4.10. Class TumozMatrix Kelas TumozMatrix juga merupakan salah satu kelas yang penting dan dibutuhkan dalam perhitungan geometri matematika. Kelas TumozMatrix
58
biasanya digunakan untuk perhitungan transformasi seperti proyeksi, rotasi, scaling, dan translasi. Atribut kelas TumozMatrix mewakili elemen-elemen dari matriks homogen 4x4. Sedangkan operasi-operasinya terdiri dari identitas, invers,
A
transpos, rotasi terhadap sumbu, dan sebagainya. Untuk lebih jelasnya dapat
IK
O
M
SU
R
AB
AY
dilihat pada gambar 3.15.
. Gambar 3.15. Class TumozMatrix
ST
3.4.11. Class TumozQuat Kelas TumozQuat merupakan kelas yang mewakili teknik quaternion
yang biasanya digunakan untuk menghitung rotasi dan orientasi pada obyek tiga dimensi (untuk mengatasi Gimbal Lock) serta untuk perhitungan-perhitungan lainnya. Atribut quaternion terdiri dari elemen dari suatu vektor yaitu x, y, z dan
59
skalar w. Operasi-operasi dari kelas TumozQuat terdiri dari konversi dari atau ke euler angle, normalisasi, konjugasi, konversi dari matriks, mengambil magnitude, perkalian, pembagian, penambahan, negasi, rotasi dan lain-lain. Untuk lebih
SU
R
AB
AY
A
jelasnya dapat dilihat pada gambar 3.16.
M
Gambar 3.16. Class TumozQuat
O
3.4.12. Class TumozRay
IK
Kelas TumozRay merupakan kelas yang mewakili suatu ray (ruas garis
yang memiliki arah) biasanya digunakan untuk teknik raycasting, menghitung
ST
persimpangan (intersection) dengan obyek tiga dimensi, deteksi benturan
(collision detection), perhitungan arah pencahayaan, dan sebagainya. Atribut dari kelas TumozRay hanya ada dua yaitu vektor titik asal (vector origin) dan vektor arah (vector direction). Sedangkan operasinya terdiri dari pengaturan ray,
60
transformasi ray ke dalam ruang matriks, dan persimpangan dengan tiap-tiap
AB
AY
A
obyek tiga dimensi. Untuk lebih jelasnya dapat dilihat pada gambar 3.17.
SU
R
Gambar 3.17. Class TumozRay
3.4.13. Class TumozPlane
Kelas TumozPlane merupakan kelas perwakilan dari suatu plane. Pada
M
umumnya plane digunakan untuk menghitung frustum culling, clipping, intersection dan lain-lain. Atribut-atribut dari kelas TumozPlane adalah vektor
O
normal, vektor titik, dan atribut jarak d ke titik asal. Operasi-operasi pada kelas
IK
TumozPlane meliputi pengaturan plane, klasifikasi plane, kalkulasi jarak suatu titik ke plane, dan sebagainya. Untuk lebih jelasnya dapat dilihat pada gambar
ST
3.18.
AB
AY
A
61
SU
3.4.14. Class TumozAabb
R
Gambar 3.18. Class TumozPlane
Kelas TumozAabb digunakan sebagai kelas perwakilan dari Axially Aligned Bounding Box yang digunakan sebagai salah satu volume pembatas
M
obyek tiga dimensi. Atribut-atributnya berupa vektor minimum, vektor maksimum, dan vektor pusat. Operasi-operasinya terdiri dari konstruksi Aabb dari
O
kelas TumozObb, memeriksa obyek yang akan dihilangkan (culing), mendeteksi
IK
obyek ray yang sepenuhnya berada di dalam Aabb (contain), persimpangan (intersection), dan sebagainya. Untuk lebih jelasnya dapat dilihat pada gambar
ST
3.19.
AB
AY
A
62
Gambar 3.19. Class TumozAabb
R
3.4.15. Class TumozObb
SU
Kelas TumozObb juga merupakan kelas perwakilan dari salah satu volume pembatas obyek tiga dimensi yaitu Oriented Bounding Box. Atributnya terdiri dari 3 vektor sumbu, 3 jari-jari sumbu, dan vektor pusat. Sedangkan
M
operasinya hampir sama dengan kelas TumozAabb yaitu persimpangan, memeriksa obyek yang akan dihilangkan (culling), transformasi ke dalam ruang
O
matriks, fungsi bantuan proyeksi Obb, dan fungsi bantuan proyeksi segitiga.
ST
IK
Untuk lebih jelasnya dapat dilihat pada gambar 3.20.
AB
AY
A
63
SU
3.4.16. Class TumozPolygon
R
Gambar 3.20. Class TumozObb
Kelas TumozPolygon merupakan kelas yang mewakili suatu polygon dan merupakan salah satu elemen dasar utama yang membentuk suatu obyek tiga
M
dimensi. Atribut-atribut dari kelas TumozPolygon antara lain pointer untuk menyimpan data verteks dan indeks dari polygon, jumlah titik (verteks) dan
O
indeks yang berada di dalam polygon, volume pembatas Aabb, plane, dan status polygon.
IK
dari
Sedangkan
operasi-operasinya
yaitu
pengaturan
polygon,
mengkalkulasi volume pembatas, clipping, culling, intersect, dan sebagainya.
ST
Untuk lebih jelasnya dapat dilihat pada gambar 3.21.
M
SU
R
AB
AY
A
64
O
Gambar 3.21. Class TumozPolygon
3.4.17. Class TumozPolylist
IK
Kelas
TumozPolylist
merupakan
kelas
yang
membantu
untuk
ST
mengelompokkan polygon agar dapat mempermudah dalam pengelolaannya. Atribut-atribut dari kelas TumozPolylist yaitu pointer untuk menyimpan data polygon, jumlah polygon yang tersimpan, dan jumlah maksimum polygon yang disediakan pada memory. Operasi-operasi dari kelas TumozPolylist adalah menambah polygon ke dalam polylist, mereset ulang polylist, mengambil data polygon, mengambil jumlah polygon, dan memeriksa kapasitas memory agar
65
dapat menambah jumlah polygon pada polylist. Untuk lebih jelasnya dapat dilihat
AB
AY
A
pada gambar 3.22.
3.4.18. Class TumozBSPTree
R
Gambar 3.22. Class TumozPolylist
SU
Kelas TumozBSPTree merupakan salah satu kelas algoritma untuk manajemen scene yaitu menggunakan algoritma diagram pohon Binary Space Partitioning (BSP Tree). Kelas ini adalah kelas yang berfungsi untuk membantu
M
efisiensi dan efektifitas dalam proses rendering seperti pada teknik culling,
O
collision detection, dan sebagainya. Atribut-atribut dari kelas TumozBSPTree terdiri dari pointer data kelas
IK
TumozBSPTree yang berada pada kelompok depan, belakang, simpul akar, dan simpul induk, pointer data dan jumlah polygon jika berada di node leaf, jumlah
ST
polygon akhir, volume pembatas Aabb, dan plane pemisah. Sedangkan pada
operasinya terdiri dari fungsi untuk membangun tree, mencari plane pemisah, menambah polygon, mengkalkulasi volume pembatas, menguji collision detection terhadap ray, menguji garis sudut pandang (line of sight) terhadap dua titik yang diberikan, dan sebagainya. Untuk lebih jelasnya dapat dilihat pada gambar 3.23.
SU
R
AB
AY
A
66
M
Gambar 3.23. Class TumozBSPTree
3.4.19. Class TumozOctree
O
Kelas TumozOctree juga memiliki peranan yang hampir sama dengan
IK
kelas TumozBSPTree yaitu berfungsi sebagai kelas algoritma diagram pohon
Octree untuk manajemen scene yang ditujukan untuk efisiensi rendering, collision
ST
detection dan sebagainya. Atributnya terdiri dari pointer data kelas TumozOctree sebagai simpul akar (root), simpul induk (parent), dan obyek anak (child object) sebanyak 8 buah. Selain itu juga ada pointer data polygon dan jumlahnya jika berada di node leaf, volume pembatas Aabb, dan posisi dari node. Operasi pada kelas TumozBSPTree terdiri dari fungsi untuk membangun
tree, membuat obyek anak, mengkalkulasi volume pembatas, menguji collision
67
detection terhadap ray atau polygon, fungsi penelusuran (traversal) dalam tree,
M
SU
R
AB
AY
A
dan sebagainya. Untuk lebih jelasnya dapat dilihat pada gambar 3.24.
O
Gambar 3.24. Class TumozOctree
3.4.20. Class TumozMovementController
IK
Kelas TumozMovementController merupakan kelas dasar (base class)
ST
dari semua kelas kontroler yang disediakan dalam Framework Tumoz Rendering Engine. Kelas ini sudah mengimplementasikan sistem kamera yang sangat sederhana yang tidak dipengaruhi oleh lingkungannya dan mampu bergerak bebas secara penuh seakan-akan berada di dalam ruang nol gravitasi. Kelas TumozMovementController memiliki beberapa atribut antara lain vektor posisi kamera, vektor kanan dari kamera, vektor atas dari kamera, vektor
68
arah pandangan kamera, vektor kecepatan atau pergerakan pandangan, quaternion untuk rotasi kamera, nilai kecepatan rotasi disekitar vektor lokal (roll, pitch dan yaw), nilai terhadap sumbu rotasi disekitar vektor lokal (sumbu x, y, dan z) dan
A
nilai tambahan lainnya. Sedangkan operasi dari kelas TumozMovementController hanya berisi fungsi akses (accessor method) dari vektor posisi, kanan, atas, arah ,
AY
dan kecepatan kamera, serta fungsi virtual seperti inisialisasi, update, dan kalkulasi ulang sumbu kamera. Untuk lebih jelasnya dapat dilihat pada gambar
ST
IK
O
M
SU
R
AB
3.25.
Gambar 3.25. Class TumozMovementController
69
3.4.21. Class TumozMCEgo Kelas TumozMCEgo merupakan kelas kontroler dengan sistem kamera yang berpusat pada sudut pandang orang pertama (Egocentric Viewpoint).
A
Atribut-atributnya merupakan atribut tambahan yaitu m_fSpeed, dan m_fSlide. Sedangkan operasinya terdiri dari mengambil nilai vektor rotasi, mengatur
AY
kecepatan rotasi, mengatur kecepatan kamera, mengatur kecepatan pergeseran
kamera, mengatur rotasi, mengatur posisi kamera, mengatur arah kamera, update,
AB
kalkulasi sumbu kamera, dan sebagainya. Untuk lebih jelasnya dapat dilihat pada
ST
IK
O
M
SU
R
gambar 3.26.
Gambar 3.26. Class TumozMCEgo
3.4.22. Class TumozMCFree Kelas TumozMCFree merupakan kelas kontroler yang menggunakan
sistem kamera bebas dengan enam derajat kebebasan (six degree of freedom). Kelas ini tidak memiliki atribut tambahan dan operasinya terdiri dari mengatur
70
nilai rotasi dan kalkulasi ulang vektor lokal, menambahkan kecepatan rotasi disekitar sumbu, update dan sebagainya. Untuk lebih jelasnya dapat dilihat pada
SU
R
AB
AY
A
gambar 3.27.
Gambar 3.27. Class TumozMCFree
M
3.4.23. Class TumozTimer
Kelas TumozTimer merupakan kelas tambahan yang berfungsi untuk
O
untuk menghitung informasi waktu seperti jam, menit, detik, waktu yang berlalu,
IK
dan fps (frame rate per second) dari suatu proses rendering. Atribut dari kelas
TumozTimer antara lain jam, menit, detik, waktu saat ini, timestamp, dan
ST
sebagainya. Sedangkan operasinya terdiri dari mengatur waktu, mengambil nilai waktu, mengambil nilai waktu yang berlalu, mengambil nilai fps, update, dan lain-lain. Untuk lebih jelasnya dapat dilihat pada gambar 3.28.
SU
R
AB
AY
A
71
Gambar 3.28. Class TumozTimer
Flowchart Diagram
M
3.5.
Flowchart atau diagram alir merupakan sebuah diagram dengan simbol-
O
simbol grafis yang menyatakan aliran algoritma atau proses yang menampilkan
IK
langkah-langkah yang disimbolkan dalam bentuk kotak, beserta urutannya dengan menghubungkan masing-masing langkah tersebut menggunakan tanda panah.
ST
Diagram ini memberi solusi selangkah demi selangkah untuk penyelesaian masalah yang ada di dalam proses atau algoritma tersebut. Berikut ini merupakan penjelasan detil diagram flowchart yang menjelaskan proses atau algoritma dari masing-masing operasi terpenting yang ada pada Framework Tumoz Rendering Engine.
72
3.5.1. Flowchart Operasi Create Device() Operasi CreateDevice() merupakan operasi dari kelas TumozRenderer yang berfungsi untuk membuat obyek render device (perangkat rendering)
A
berdasarkan pilihan kelas implementasi dari API yang disediakan.
AY
Mulai
AB
Api=API_DIRECT3D
Ya
Tidak
GetProcAddress
SU
Load Library Gagal?
R
Load Libyrary TumozD3.dll
Tidak
GetProcAddress Gagal?
Tidak
M
Buat handle ke pointer Tumoz Render Device
ST
IK
O
Ya
Ya Pointer Tumoz Render Device Gagal? Tampil Pesan Error
Ya
Return E_FAIL
Selesai
Gambar 3.29. Flowchart Operasi CreateDevice()
Tidak
Return S_OK
73
Seperti yang digambarkan pada gambar 3.29. dimulai dari memilih API yang diinginkan yaitu API_Direct3D. Jika tidak memilih API tersebut maka akan keluar pesan error lalu mengembalikan nilai fungsi E_FAIL sebagai tanda gagal
A
dan keluar. Sebaliknya jika ya maka akan memulai proses Load Library Tumoz3D.dll. Hasil dari proses Load Library tersebut akan di periksa jika gagal
berhasil akan berlanjut ke proses GetProcAddress.
AY
maka akan muncul pesan error dan seterusnya seperti sebelumnya. Dan jika
AB
Pada proses GetProcAddres akan menghubungkan semua fungsi-fungsi interface TumozRenderDevice dengan kelas implementasi TumozD3D. Dan setelah berhasil akan dibuatkan handle ke pointer kelas TumozRenderDevice
R
tersebut lalu mengembalikan nilai fungsi S_OK sebagai tanda proses berhasil dan
SU
keluar. Dengan demikian maka render device siap untuk digunakan.
3.5.2. Flowchart Operasi Init()
M
Operasi Init() merupakan operasi dari kelas TumozD3D yang merupakan turunan dari interface TumozRenderDevice. Operasi ini berfungsi untuk
O
melakukan inisialisasi pada dialog box dalam memilih device dan format yang dan beberapa pengaturan
IK
diinginkan, menentukan jumlah tampilan windows, (setting) lainnya sebelum rendering dimulai.
ST
Awal dari proses ini di mulai dari menentukan jumlah tampilan windows
yang diinginkan, lalu membuat enumerasi berdasarkan buffer stencil dan buffer depth. Setelah itu membuat logo dan dialog box untuk setting device dan format yang kemudian ditampilkan ke user. Jika hasilnya error maka akan di simpan ke
file log dan keluar. Dan jika sebaliknya maka operasi dilanjutkan ke operasi Go(). Untuk lebih jelasnya dapat dilihat pada gambar 3.30.
74
Mulai
Buat handle untuk meload gambar logo
Cek jumlah windows > 0
Tidak
Set windows tunggal
Buat dan Tampilkan dialog setting device dan simpan dalam nResult
A
Buat variabel dan atur savelog berdasarkan Param
AY
Ya Cek handle gambar logo ada? Cek jumlah windows > batas maksimum
Ya
Tidak
Hapus handle gambar logo
Tampil log pemilihan dialog selesai
SU
Buat array windows
Cek nResult = -1
M
Atur windows utama
O
Cek bit stencil minimum > 0
IK
Ya
ST
m_bStencil = true
Buat enumerasi berdasarkan depth buffer dan stencil buffer
Tampil Log panggil dialog
Tidak
R
Atur jumlah windows = batas maks
AB
Ya
Tidak
Cek nResult =0
Tidak
Cek nResult = -2
Ya
Ya
Ya
Tampil log error: pemiilihan dialog error
Tampil log warning: pilihan dibatalkan user
Tampil log error: adapter grafis tidak kompatible
Return TUMOZ_FAIL
Return TUMOZ_CANCELED
Return TUMOZ_NOTCOMPATI BLE
Tidak Tampil log menjalanka n MS Direct3D
Return Go()
Selesai
Gambar 3.30. Flowchart Operasi Init()
Tidak
75
3.5.3. Flowchart Operasi Go() Operasi Go() merupakan salah satu fungsi bantuan (helper function) dari kelas TumozD3D yang membantu proses inisialisasi pada operasi Init(). Operasi
A
ini berfungsi untuk memulai jalannya proses API Direct3D berdasarkan pilihan setting device, format dan sebagainya dari combo box pada operasi Init().
AY
Proses awal dari operasi ini dimulai dari membuat obyek Direct3D9 (D3D) dan jika berhasil maka dilanjutkan ke proses perulangan untuk memeriksa
AB
pilihan setting device user yang sesuai dengan combo box untuk disimpan datanya. Setelah itu dilanjutkan proses pembuatan struktur present parameter berdasarkan data yang di simpan sebelumnya beserta pengaturan stencil buffer
R
dan tampilan windows apakah akan memakai layar penuh (fullscreen) atau tidak.
SU
Pada tahapan ini proses dilanjutkan dengan pembuatan obyek Direct3DDevice9 (D3DDevice) berdasarkan parameter dari data pilihan device yang di simpan dan data present parameter yang telah di buat. Apabila tampilan
M
windows yang diinginkan lebih dari satu dan tampilannya tidak memakai layar
O
penuh (fullscreen) maka perlu dibuatkan swapchain tambahan yang berfungsi untuk menampilkan beberapa jendela tampilan secara simultan.
IK
Tahapan akhir dari operasi ini adalah memeriksa apakah obyek
D3DDevice (pointer device) telah berhasil di buat dan tidak mengalami error. Jika
ST
berhasil maka akan menampilkan hasil pada file log bahwa device telah siap di gunakan dan memanggil fungsi LogDeviceCaps() untuk informasi tambahan. Jika semuanya telah selesai maka data-data status sistem akan di simpan ke variabel
global dan kemudian dilanjutkan lagi ke operasi OneTimeInit(). Untuk lebih jelasnya flowchart dari operasi tersebut dapat dilihat pada gambar 3.31.
76
Mulai
Apakah jenis Stencil buffer dipilih?
Cek pointer D3D ada?
Tidak
m_bStencil = false
Ya
m_bStencil = true
Release dan set NULL
A
Ya
Tidak
Buat Direct3D9 Ya
Tidak
AB
Atur windows utama D3D beserta ukuran Back Buffer dan hilangkan cursor
Set windows index 0 ke windows utama D3D beserta ukuran Back buffer sesuai dengan windows default
AY
Tampilan fullscreen?
Buat D3D gagal?
True
R
Buat Device Direct3D
Tampil log error: Direct3DCreate9 ()
Tampil log inisialisasi siap dan online
SU
False
Cek jumlah windows > 0 & tidak fullscreen?
i=0
Buat LogDeviceCaps
M
Ya
O
i < Jumlah combo device
Buat SwapChain tambahan
Tidak Tidak
ST
IK
Ya
Cek Apakah Combo Sesuai dgn adapter?
Release pointer enumerasi dan set NULL
Tidak
Return OneTimeInit();
i++
Ya
Cek Device Direct3D gagal?
Simpan nilai combo dan break
Ya
Set Present Parameter
Set variabel global bahwa device sudah berjalan
Tampil log error: IDirect3D::Creat eDevice()
Gambar 3.31. Flowchart Operasi Go()
Return TUMOZ_CREATEDEVI CE
Selesai
77
3.5.4. Flowchart Operasi OneTimeInit() Operasi OneTimeInit() juga merupakan salah satu fungsi bantuan dari kelas TumozD3D. Operasi ini melakukan inisialisasi seperti mengatur
A
renderstate, material standar, texture filtering, viewport, dan hal-hal yang dibutuhkan lainnya sebelum rendering dimulai. Operasi OneTimeInit() juga
AY
merupakan paket atau kumpulan pengaturan (setting) standar untuk proses rendering yang paling umum di pakai.
AB
Pertama-tama proses dimulai dengan memeriksa apakah prosesor sudah
mendukung teknologi SIMD agar dapat digunakan. Kemudian proses dilanjutkan dengan mengatur engine agar siap dalam melakukan proses rendering untuk
R
poligon solid. Proses selanjutnya adalah membuat membuat obyek skin manager
SU
dan vertex cache manager dan juga mengaktifkan renderstate untuk lighting, culling dan z buffer.
Untuk membantu sistem pencahayaan maka perlu dibuatkan pengaturan
M
material standar dan jika gagal maka akan keluar dari proses. Sebaliknya jika
O
berhasil maka proses selanjutnya adalah mengatur texture filtering, kemudian pengaturan stage awal untuk proyeksi perspektif 3 dimensi, pengaturan matriks
IK
identitas untuk tampilan tiga dimensi, dan pengaturan clipping planes untuk
ST
tampilan.
Shader merupakan perangkat bantu yang sangat penting sehingga perlu
dilakukan pemeriksaan dan inisialisasi dari shader tersebut. Selanjutnya tahapan
akhir dari operasi ini adalah pengaturan pencahayaan ambient, pengaturan texture stage dan beberapa proses lainnya. Untuk lebih jelasnya flowchart dari operasi tersebut dapat dilihat pada gambar 3.32.
78
Mulai
Tidak
Ya Tampil log SIMD CPU tidak terdeteksi
Inisialisasi dan pemeriksaan Shader
A
Tampil log SIMD CPU terdeteksi
Cek apakah Shader dapat digunakan?
AY
Cek apakah tidak ada SIMD CPU?
Set nilai Clipping Planes
Tidak
Set Mode Shading Solid
Ya
AB
Atur nilai default Shader
Buat Skin Manager dan Vertex Manager
Cek apakah pembuatan Vertex Shader dasar gagal
Tidak
Pengaturan level Ambient Light
SU
R
Aktifkan RenderState untuk Lighting, Culling dan Z buffer
Ya
Buat dan atur Material standar
Tampil log Buat Vshader gagal
M
Cek aktivasi Material D3DDevice gagal?
Return TUMOZ_FAIL
Tidak
Ya
Cek pengaturan Mode Engine dgn Perspective gagal?
Return TUMOZ_FAIL
Ya
O
Set Texture Filtering
Cek apakah inisialisasi Stage dgn Perspective gagal?
Ya
ST
IK
Tampil log error: atur material
Return TUMOZ_FAIL
Pengaturan stage awal untuk mode 3D atau perspective
Return TUMOZ_FAIL
Set Transformasi World
Set identity matrix untuk View 3D
Tampil log inisialisasi one time scene selesai
Selesai Return TUMOZ_OK
Gambar 3.32. Flowchart Operasi OneTimeInit()
Tidak
79
3.5.5. Flowchart Operasi UseWindow() Operasi
ini
juga
merupakan
operasi
turunan
dari
interface
TumozRenderDevice yang terdapat pada kelas implementasi TumozD3D. Operasi
A
ini berfungsi untuk menentukan jendela tampilan utama yang akan dijadikan target proses rendering baik pada jendela tampilan tunggal atau pada beberapa
AY
jendela tampilan. Untuk lebih jelasnya flowchart dari operasi tersebut dapat dilihat pada gambar 3.33.
AB
Mulai
SU
R
Buat Obyek Backbuffer dari LPDIRECT3DSURFA CE9 dan set NULL
Cek dari Present Parameter apakah bukan mode windows?
Tidak
nHwnd >= m_nNumhW nd
M
O IK
ST
Tidak
Ya
Ya
Return TUMOZ_OK
Tidak
Cek panggil m_pChain[nHwnd] ->GetBackBuffer() gagal?
Return TUMOZ_INVALIDID
Ya Tampil log error: GetBackBuffer() gagal di UseWindow
Set Target Render D3DDevice ke Backbuffer
Pointer BackBuffer di Release
m_nActivehWn d = nHwnd Return TUMOZ_FAIL Return TUMOZ_OK
Selesai
Gambar 3.33. Flowchart Operasi UseWindow()
80
3.5.6. Flowchart Operasi InitStage() Tujuan dari operasi ini adalah untuk melakukan kalkulasi atau perhitungan matriks proyeksi perspektif dan proyeksi orthogonal berdasarkan field
A
of view (FOV) yang diberikan pada viewport stage yang dituju. Operasi ini merupakan bagian dari kelas TumozD3D yang juga merupakan operasi turunan
AY
dari interface TumozRenderDevice. Detil dari proses flowchart operasi ini
AB
digambarkan pada gambar 3.34.
Cek pointer Viewport ada?
SU
Tidak
Ya
M
Copy pView ke dalam m_VP[nStage]
O
nStage>3 || nStage<0
ST
IK
Ya
nStage=0
Hitung Aspect Ratio Stage
Buat Viewport baru dari m_dwWidth dan m_dwHeight lalu copy ke dalam m_VP[nStage]
R
Mulai
Cek apakah perhitungan Matriks Proyeksi Perspektif gagal? Ya
Tidak Return TUMOZ_FAIL
Selesai
Gambar 3.34. Flowchart Operasi InitStage()
Tidak
Hitung Matriks Proyeksi Orthogonal
81
3.5.7. Flowchart Operasi CreateVShader() Operasi CreateVShader() merupakan operasi penting bagi kelas TumozD3D yang berfungsi untuk membuat obyek verteks shader untuk device
A
Direct3D. Shader tersebut dapat mengkalkulasi efek rendering pada perangkat keras grafis dengan tingkat fleksibilitas yang sangat tinggi. Operasi ini juga
AY
merupakan operasi turunan dari interface TumozRenderDevice.
Pengecekan batas maksimum dari obyek verteks shader dilakukan pada
AB
awal proses, lalu dilanjutkan dengan memeriksa dari parameter fungsi apakah shader sudah di kompilasi dan setelah itu di cek juga apakah menggunakan file atau data langsung. Jika sudah di kompilasi maka datanya langsung disimpan ke
R
dalam pointer agar dapat di proses. Sebaliknya jika belum maka perlu memanggil
SU
fungsi dari Direct3D yaitu D3DXAssembleShaderFromFile() untuk data yang berasal dari file atau D3DXAssembleShader() untuk data langsung. Hasil dari kompilasi tersebut kemudian disimpan ke dalam pointer dengan menggunakan
M
fungsi GetBufferPointer().
O
Langkah selanjutnya dari proses flowchart ini adalah membuat obyek
verteks
shader
menggunakan
fungsi
dari
pointer
device
yaitu
IK
CreateVertexShader() berdasarkan pointer yang berisi data hasil kompilasi yang telah di buat sebelumnya. Setelah obyek verteks shader berhasil di buat lalu
ST
idnya di simpan agar dapat digunakan dan proses terakhir dari flowchart adalah dengan menambah jumlah total obyek verteks shader yang telah di buat. Untuk lebih jelasnya flowchart dari operasi ini dapat dilihat pada gambar 3.35.
82
Mulai
Cek dari parameter apakah sudah dicompile?
Tidak
Diambil dari File?
Tidak
Tidak
Ya Ya
Ya
Panggil D3DXAssembleShaderFrom File dengan data dari parameter dan simpan hasil HRESULT hrA
AB
Tampil log error: sudah mencapai jumlah maks
Diambil dari File?
Tidak
Ya
R
Return TUMOZ_OUTOFMEM ORY
Panggil D3DXAssembleShader dengan data dari parameter dan simpan hasil HRESULT hrA
AY
Cek apakah jumlah Vertex Shader melebihi batas maksimum?
A
Buat variabel pointer D3DBuffer, DWORD, HRESULT dan HANDLE
Simpan langsung data dari parameter kedalam pointer DWORD pVS
SU
Panggil CreateFile() dengan data dari parameter sebagai argumen dan simpan hasilnya pada hFile
M
hFile == INVALID_HANDLE _VALUE
Buat FileMapping dan ambil datanya Tidak dan simpan ke dalam pointer DWORD pVS
Cek apakah hrA berhasil?
Tidak
Tampil log error
Ya Simpan data pointer ke pVS menggunakan GetBufferPointer()
Ya
Cek apakah pembuatan CreateVertexSha der dgn pVS gagal?
Return TUMOZ_FILENOT FOUND
Ya
ST
IK
O
Tampil log error: CreateFile() gagal
Tidak
Return TUMOZ_FAIL
Selesai
Return TUMOZ_OK
Increment jumlah Vertex Shader yang ada
Bebaskan resource handle
Gambar 3.35. Flowchart Operasi CreateVShader()
Simpan ID kedalam variabel global Vertex Shader
83
3.5.8. Flowchart Operasi AddSkin() Operasi AddSkin() merupakan salah satu operasi terpenting pada kelas TumozD3DSkinManager yang juga merupakan operasi turunan dari interface
A
TumozSkinManager. Tugas dari operasi ini adalah untuk membuat obyek skin baru berdasarkan material yang diberikan pada parameter dari fungsi tersebut.
AY
Sedangkan untuk tekturnya akan dikosongkan terlebih dahulu.
Operasi ini diawali dengan mengalokasikan slot memory pada pointer
AB
obyek skin untuk menyimpan obyek skin yang baru. Untuk efisiensi slot memory yang disediakan berjumlah 50 buah dan apabila slot tersebut penuh maka slot tersebut akan di tambah 50 buah lagi.
R
Proses berikutnya dilanjutkan dengan pembuatan material berdasarkan
SU
parameter fungsi. Kemudian material tersebut di periksa apakah sama dengan material yang sudah ada menggunakan fungsi MaterialEqual(). Apabila sudah ada maka idnya disimpan ke dalam obyek skin dan jika tidak maka akan dialokasikan
M
ke pointer material baru lalu idnya di simpan ke dalam obyek skin.
O
Tahapan selanjutnya dari operasi ini adalah pengaturan nilai alpha dari
skin menjadi false. Tekstur pada operasi ini dikosongkan terlebih dahulu dengan
IK
cara mengatur masing-masing id dari tekstur pada skin dengan nilai MAX_ID. Lalu dilanjutkan dengan menyimpan id skin dan menambah jumlah obyek skin
ST
yang telah di buat. Proses terakhir dari operasi ini adalah mengembalikan nilai balik
TUMOZ_OK sebagai tanda bahwa proses operasi telah berjalan dengan lancar tanpa adanya error. Untuk lebih jelasnya flowchart dari operasi ini dapat dilihat pada gambar 3.36.
84
Mulai
Jumlah Skin mod 50 == 0? Tidak
nMat<Jumlah Material?
Alokasikan 50 slot memory Skin baru ke pointer Skin global
Tidak
Ya
Cek material baru dng yg sudah ada pd indeks [nMat] menggunakan Material Equal()
Return TUMOZ_OUTOFME MORY
bMat = true; Break;
O
M
bMat == true?
IK
Int i = 0
Tidak
Tidak
Ya
Ya
i < 8?
Ubah ID Skin baru dengan jumlah Material
SU
Ya
Selesai
nMat++
AB
Cek apakah nilai pointer Skin global tidak valid?
Ya
Set penggunaan nilai alpha pada Skin baru menjadi false
R
Ya
Tidak
A
Increment jumlah Material yang ada
nMat=0
AY
Tidak Buat variabel UINT nMat dan bool bMat=false
ST
Copy Material baru ke dalam pointer material global indeks terakhir
Buat Material berdasarkan nilai dari parameter
Tidak
Jumlah Material mod 50 == 0?
Tidak Ya Set ID Texture pada indeks [i] Skin baru menjadi MAX_ID
Set nilai reference parameter ID Skin ke jumlah Skin
i++
Increment jumlah Skin yang ada
Ya Alokasikan 50 slot memory Material baru ke pointer Material global
Cek apakah nilai pointer Material global tidak valid?
Ubah ID Material Skin baru dengan nMat
Gambar 3.36. Flowchart Operasi AddSkin()
Return TUMOZ_OK
85
3.5.9. Flowchart Operasi AddTexture() Seperti yang dijelaskan pada operasi AddSkin() bahwa tekstur tidak ditambahkan saat pembuatan obyek skin baru dan ini berarti penambahan tekstur
A
akan dilakukan secara terpisah yaitu menggunakan operasi AddTexture(). Operasi AddTexture() juga merupakan operasi pada kelas TumozD3DSkinManager dan
AY
merupakan operasi turunan dari interface TumozSkinManager yang berfungsi untuk menambahkan obyek tekstur baru ke dalam obyek skin.
AB
Pertama-tama operasi dimulai dari memeriksa validitas id skin dari parameter. Karena obyek tekstur dalam obyek skin hanya dibatasi sebanyak 8
stage saja maka proses selanjutnya adalah memeriksa apakah stage tersebut sudah
SU
sudah ada sebelumnya.
R
penuh. Setelah itu dilanjutkan lagi dengan pemeriksaan apakah file tekstur ini
Jika file tekstur tersebut belum ada maka perlu dilakukan alokasi memory untuk pointer obyek tekstur baru. Lalu simpan atribut-atribut yang
M
penting pada obyek tekstur baru seperti status alpha, dan nama tekstur. Operasi
O
dilanjutkan lagi dengan memuat data dari file tekstur ke dalam buffer grafis pada obyek device menggunakan fungsi bantuan CreateTexture() berdasarkan data file
IK
tekstur dan nilai alpha dari parameter. Apabila obyek tekstur menggunakan transparansi atau nilai status alpha
ST
dari parameter adalah true maka nilai atribut-atribut tambahan dimasukkan ke dalam pointer tekstur serta memanggil fungsi bantuan SetAlphaKey() dan
SetTransparency(). Dan terakhir dilanjutkan dengan menambah jumlah obyek tekstur yang telah di buat dan menyimpan id tekstur ke dalam obyek skin. Untuk lebih jelasnya flowchart dari operasi ini dapat dilihat pada gambar 3.37. dan 3.38.
86
Cek ID Texture terakhir dari Skin global pada indeks ID dari param sudah ada?
Mulai
Buat variabel UINT nTex, bool bTex=false dan pointer TUMOZTEXTURE pTumozTex
Tidak
nTex = 0
Ya error: semua texture stage telah diset
Cek ID Skin dari parameter >= Jumlah Skin?
nTex++
AY
Ya Tidak
Cek nama pada Texture global indeks nTex sama dgn nama dr param?
Ya
bTex = true; break; bTex == false?
M
ST
IK
O
Cek apakah nilai pointer Texture global tidak valid? Ya
error: Add Texture() gagal, realloc() Return TUMOZ_OUTOF MEMORY
Cek bAlpha?
Tidak
SU
Jumlah Texture mod 50 == 0?
Alokasikan 50 slot memory Texture baru ke pointer Texture Tidak global
A
Tidak
Ya
Ya
Ya
R
Return TUMOZ_BUFFER SIZE
Tidak
AB
Return TUMOZ_INVALID ID
Selesai
A
nTex < Jumlah Texture
Tidak
Cek bAlpha dari parameter sama dgn true?
Tidak
Ya Tidak
Set nilai fAlpha pada Texture global indeks baru menjadi 1.0f
Ya Set nilai Alpha dari Skin global pada index ID Skin dari parameter menjadi true
Set nilai pointer ClrKeys pada Texture global indeks baru menjadi NULL
Simpan nama Texture dari parameter ke dalam nama Texture global indeks baru
Return HResult
B
Tidak
Panggil CreateTexture() dgn Texture global indeks baru dan bAlpha sebagai parameter dan simpan HResultnya
Cek apakah HResult CreateTexture gagal?
Simpan pointer Texture global indeks baru kedalam pTumozTex
Simpan atribut Color Keys dari parameter ke dalam TumozTex
Ya
Simpan pointer isi data pTumozTex ke dalam LPDIRECT3DTEXTURE9 pTex
error: CreateTexture() gagal
C
Gambar 3.37. Flowchart Operasi AddTexture()
87
C
DWORD dw=0
Ya
Tidak
nTex = Jumlah Texture yang ada
Ya Simpan nilai alpha dari parameter ke dalam pTumozTex
Cek apakah Hresult SetTransparency gagal?
Panggil SetAlphaKeys() dgn pTex dan ColorKeys sebagai param dan simpan HResultnya
Cek apakah Hresult SetAlphaKeys gagal?
R
Tidak
AB
Increment jumlah Texture yang ada
Int i = 0
Ya
A
error: SetAlphaKeys gagal
i<8
i++
Ya
M
Ya
ST
IK
O
error: SetTransparency gagal
Return HResult
dw++
Tidak
SU
Panggil SetTransparency() dgn pTex dan nilai alpha sebagai param dan simpan HResultnya
B
AY
Cek nilai Alpha dari param < 1.0f?
A
dw < Jumlah Color Keys dari parameter
Tidak
Cek apakah ID texture pada Skin global indeks ke [i] == MAX_ID
Tidak
Ya Set ID Texture pada Skin global indeks ke [i] = nTex dan break
Return HResult
Return TUMOZ_OK
Selesai
Gambar 3.38. Lanjutan Flowchart Operasi AddTexture().
88
3.5.10. Flowchart Operasi CreateStaticBuffer() Operasi
CreateStaticBuffer()
merupakan
operasi
dari
kelas
TumozD3DVCManager yang juga merupakan operasi turunan dari interface
A
TumozVertexCacheManager. Tugas dari operasi ini adalah untuk membuat buffer verteks dan indeks statis berdasarkan data dari parameter agar dapat digunakan
AY
nanti pada saat proses rendering.
Awal proses dari operasi ini dimulai dari mengalokasikan memory untuk
AB
pointer obyek buffer statis baru dan menyimpan atribut-atribut dari paramter seperti jumlah verteks dan indeks serta id skin yang berhubungan dengan buffer tersebut.
R
Sebelum memasukkan data verteks maka perlu di periksa terlebih dahulu
SU
jenis format (FVF) dari verteks tersebut agar bisa diketahui langkah data (stride) dan ukuran dari verteks tersebut. Langkah selanjutnya adalah apabila menggunakan indeks maka buffer indeks (LPDIRECT3DINDEXBUFFER9) di
M
buat menggunakan fungsi CreateIndexBuffer() dari device. Untuk mengisi data
O
dari parameter ke dalam buffer indeks maka dilakukan dengan cara metode penguncian menggunakan fungsi Lock() dan Unlock() dari fungsi obyek indeks
IK
buffer tersebut.
Untuk membuat buffer verteks (LPDIRECT3DVERTEXBUFFER9) juga
ST
hampir sama dengan pembuatan buffer indeks yaitu menggunakan fungsi CreateVertexBuffer() dari device. Lalu data verteks dari parameter di simpan di antara dua metode penguncian (Lock() dan Unlock()) dari fungsi obyek verteks buffer tersebut. Detil dari proses flowchart operasi ini digambarkan pada gambar 3.39.
89
Jumlah Static Buffer mod 50 == 0?
Tidak
Cek apakah nilai pointer Static Buffer global tidak valid?
Ya Return TUMOZ_OUTOFMEMORY
Cek masing-masing Vertex ID dan Set Stride dan FVF yg sesuai ke dlm Static Buffer global indeks baru
Cek apakah Vertex ID tidak ketemu?
Ya Return TUMOZ_INVALIDID
Ya Tidak
Tidak
SU
Jumlah Indices > 0
Set atribut bIndis = false, jml triangle = verts/3 dan data IB = NULL pada Static buffer global indeks baru
R
Selesai
Ya
M
Set atribut bIndis = true dan jml triangle = indis/3 pada Static buffer global indeks baru
ST
IK
O
Panggil CreateIndexBuffer() dgn atribut data IB pada Static Bufffer global indeks baru sbg parameter dan simpan HResultnya
Cek apakah HResult CreateIndexBuffer() gagal? Ya
Tidak
Ya
Tidak
dwActualFVF = 0
A
Jumlah Static Buffer >= (MAX_ID-1)
Cek apakah D3D menggunakan Shader?
Simpan Jml Vertex & Index jg ID Skin dari param ke dlm Static Buffer global indeks baru
AY
Buat variabel pendukung seperti Ya DWORD dwActualFVF dan pointer VOID Tidak Alokasikan 50 slot pData memory Static Buffer baru ke pointer Static Tidak Buffer global Cek apakah
Simpan FVF Static Buffer global indeks baru ke dwActualFVF
Panggil CreateVertexBuffer() dgn dwActualFVF dan atribut data VB pada Static Bufffer global indeks baru sbg parameter dan simpan HResultnya
AB
Mulai
Cek apakah HResult CreateVertex Buffer() gagal?
Cek apakah pemanggilan Lock() pada data IB Static Buffer indeks baru dgn pData sbg param berhasil?
Tidak Cek apakah pemanggilan Lock() pada data VB Static Buffer indeks baru dgn pData sbg param berhasil? Ya
Ya Copy data verts dari param ke dlm pointer pData yg telah dikunci
Copy data indis dari Tidak param ke dlm pointer pData yg telah dikunci
Panggil method Unlock() pada data IB Static Buffer indeks baru Return TUMOZ_BUFFER LOCK
Panggil method Unlock() pada data VB Static Buffer indeks baru
Tidak
Ya
Return TUMOZ_CREATEBUFFER
Return TUMOZ_OK
Masukkan jumlah Static buffer ke dalam pointer pnID dari parameter sebagai ID baru
Increment jumlah Static Buffer yang ada
Gambar 3.39. Flowchart Operasi CreateStaticBuffer()
90
3.5.11. Flowchart Operasi CreateFont() Operasi ini digunakan untuk membuat obyek font GDI yaitu obyek standar pada windows untuk menggambar huruf atau teks dalam proses rendering.
A
Operasi CreateFont() merupakan operasi bagian dari kelas TumozD3D dan turunan dari operasi interface TumozRenderDevice.
AY
Untuk membuat obyek font harus ditentukan terlebih dahulu deskripsi
dari font tersebut seperti tinggi, lebar, style dan sebagainya menggunakan struct
AB
D3DXFONT_DESC. Obyek tersebut kemudian di buat menggunakan fungsi
D3DXCreateFontIndirect() dari API Direct3D. Untuk lebih jelasnya flowchart
R
dari operasi ini dapat dilihat pada gambar 3.40.
Tidak
Set masing-masing atribut D3DX Font Description berdasarkan parameter seperti tinggi, lebar, style font dll
M
Cek apakah pointer ID font dari param valid?
SU
Mulai
Alokasikan tempat baru utk pointer global LPD3DXFont menggunakan Realloc()
IK
O
Ya
ST
Return TUMOZ_INVALIDPARAM
Cek apakah HResult D3DXCreateFontIndirect() berhasil? Ya Simpan Jumlah Font ke dalam pointer ID Font dari param sbg ID baru
Tidak
Increment jumlah Font yang ada Panggil D3DXCreateFontIndirect() dgn pointer D3D Device, Font Desc dan pointer Font global indeks baru sbg param dan simpan Hresult
Return TUMOZ_OK
Selesai
Gambar 3.40. Flowchart Operasi CreateFont()
Return TUMOZ_FAIL
91
3.5.12. Flowchart Operasi BeginRendering() Operasi ini adalah salah satu operasi utama pada kelas TumozD3D untuk memulai proses rendering. Tugasnya antara lain adalah membersihkan scene dan
A
mempersiapkan device untuk menerima proses rendering geometri. Awalnya buffer pixel, stencil dan depth dibersihkan menggunakan
AY
fungsi Clear() dari device dan setelah itu memanggil fungsi device BeginScene()
yang menandakan device siap untuk melakukan proses rendering. Untuk lebih
Mulai
Tidak
AB
jelasnya flowchart dari operasi ini dapat dilihat pada gambar 3.41.
Apakah bClearStencil & Stencil global == true?
SU
R
DWORD dw=0
Cek parameter bClearPixel II bClearDepth II bClearStencil
Cek apakah pemanggilan BeginScene() pada pointer D3D gagal?
Tidak
Ya
dw |= D3DCLEAR_STENCIL
Ya
Tidak
Ya
Return TUMOZ_FAIL
M
Apakah bClearPixel == true?
O
Ya
ST
IK
dw |= D3DCLEAR_TARGET
Tidak
Tidak Tidak
Cek apakah pemanggilan Clear() pada pointer D3D dengan dw dan ClearColor global sbg param gagal?
Set status Scene sedang berjalan menjadi true pada variabel global
Ya
Apakah bClearDepth == true?
Tampil log error: Clear()
Return TUMOZ_OK
Ya
dw |= D3DCLEAR_ZBUFFER
Selesai
Gambar 3.41. Flowchart Operasi BeginRendering()
92
3.5.13. Flowchart Operasi EndRendering() Operasi
EndRendering()
merupakan
pasangan
dari
operasi
BeginRendering() pada kelas TumozD3D yang bertugas untuk mengakhiri proses
A
rendering dan menampilkan scene ke front buffer. Prosesnya sangat sederhana dimulai dari mengirim semua data buffer
AY
verteks untuk ditampilkan menggunakan fungsi ForcedFlushAll() dari obyek
pointer TumozVertexCacheManager. Lalu proses rendering diakhiri dengan
AB
memanggil fungsi device yaitu EndScene().
Dan terakhir hasil rendering ditampilkan ke layar (front buffer) menggunakan fungsi Present() baik dari device untuk jendela tampilan tunggal jendela tampilan yang aktif dari beberapa
R
atau dari obyek swapchain untuk
SU
windows. Detil dari proses flowchart operasi ini digambarkan pada gambar 3.42.
Mulai
O
M
Cek pemanggilan ForcedFlushAll() pointer Vertex manager global gagal?
IK
Ya
ST
error: ForceFlush All() gagal
Tidak
Tidak
Cek attrib windowed dari D3D Present parameter true & Jml windows > 0? Ya
Tidak
Cek pemanggilan Present() dari pointer SwapChain global pada indeks windows aktif gagal?
Panggil EndScene() dari pointer D3D Device
Cek pemanggilan Present() dari pointer D3D Device global gagal?
Ya Tidak error: Present() gagal
Ya
Selesai
Set status Scene sedang berjalan menjadi false pada variabel global
Gambar 3.42. Flowchart Operasi EndRendering()
93
3.5.14. Flowchart Operasi UseShaders() Tugas dari operasi ini adalah untuk menghidupkan atau mematikan fitur shader pada device saat proses rendering. Operasi ini adalah operasi dari kelas yang
juga
merupakan
operasi
turunan
dari
kelas
A
TumozD3D
TumozRenderDevice.
AY
Prosesnya dimulai dengan mengosongkan semua isi verteks buffer dan
memvalidasi ulang status kondisi dari obyek TumozVertexCacheManager
AB
menggunakan fungsi ForcedFlushAll() dan InvalidateStates(). Dan apabila fitur shader dimatikan maka semua pengaturan shader di set ke NULL atau sebaliknya
jika fitur shader dihidupkan maka pengaturan FVF akan di set ke 0. Detil dari
R
proses flowchart operasi ini digambarkan pada gambar 3.43.
SU
Mulai
Tidak
Cek status variabel global apakah Shader dapat digunakan sama dengan parameter?
M
Cek status dr variabel global apakah Shader tidak dapat digunakan?
O
Ya
ST
IK
Selesai
Ya
Panggil ForcedFlushAll() dari pointer Vertex Manager
Panggil InvalidateStates() dari pointer Vertex Manager
Set variabel global status penggunaan Shader berdasarkan variabel
Tidak
Cek apakah variabel global status penggunaan shader adalah false? Ya Panggil SetVertexShader() dari pointer D3D Device dg parameter NULL
Panggil SetPixelShader() dari pointer D3D Device dg parameter NULL
Panggil SetVertexDeclaration() dari pointer D3D Device dg parameter NULL
Gambar 3.43. Flowchart Operasi UseShaders()
Tidak
Panggil SetFVF() dari pointer D3D Device dg parameter 0
94
3.5.15. Flowchart Operasi DrawText() Sesuai dengan namanya operasi ini merupakan operasi yang digunakan untuk menggambar teks atau huruf yang berasal dari parameter menggunakan
A
obyek font GDI yang telah dijelaskan sebelumnya dalam proses rendering. Operasi dari kelas TumozD3D ini biasanya dipanggil di antara fungsi
AY
BeginRendering() dan EndRendering(). Untuk lebih jelasnya flowchart dari operasi ini dapat dilihat pada gambar 3.44. Cek apakah ID Font lebih besar/ sama dgn jumlah font yang ada?
AB
Mulai
R
Deklarasi variabel lokal seperti RECT dengan ukuran sesuai dgn param dan pointer char untuk menyimpan teks
Tidak
Panggil DrawText dari pointer D3DXFont global dgn teks, RECT dan warna Font sbg param
Ya
SU
Return TUMOZ_INVALIDPARAM
Return TUMOZ_OK
Selesai
M
Simpan atau tempatkan teks dari param ke dalam pointer char lokal
O
Gambar 3.44. Flowchart Operasi DrawText()
IK
3.5.16. Flowchart Operasi SetAmbientLight() Pencahayaan ambient merupakan salah satu teknik sistem pencahayaan
ST
dalam rendering tiga dimensi. Pencahayaan ambient merupakan pencahayan dengan warna konstan secara merata pada seluruh wilayah scene tanpa diketahui asal sumber cahayanya. Operasinya sangat sederhana yaitu dengan mengambil nilai warna dari
parameter lalu di konversi dalam jarak bilangan integer 255. Apabila menggunakan
shader
nilai
tersebut
dijadikan
argumen
pada
fungsi
95
SetVertexShaderConstantF() dan diteruskan lagi dengan memanggil fungsi SetRenderState() dengan argumen dari nilai tersebut. Detil proses flowchart Operasi dari kelas TumozD3D ini digambarkan pada gambar 3.45.
AY
Panggil SetVertexShaderConstantF() dari pointer D3D Device untuk mengatur warna default diffuse pd Shader
Tidak
R
Hitung nilai warna dari parameter dengan range 255
Ya
AB
Panggil ForcedFlushAll() dari pointer Vertex Manager global
Cek variabel global apakah dapat melakukan Shader?
A
Mulai
SU
Panggil SetRenderState() dari pointer D3D Device untuk Ambient Light dengan warna hasil perhitungan sebagai parameter
M
Selesai
O
Gambar 3.45. Flowchart Operasi SetAmbientLight()
IK
3.5.17. Flowchart Operasi SetWorldTransform() Operasi SetWorldTransform() merupakan operasi dari kelas TumozD3D
ST
yang mengatur transformasi world yaitu transformasi pada semua obyek dalam scene yang akan di render sampai ada perubahan berikutnya. Prosesnya sangat sederhana yaitu dengan memanggil fungsi dari obyek
device SetTransform() berdasarkan data matriks world yang diberikan oleh parameter. Untuk lebih jelasnya flowchart dari operasi ini dapat dilihat pada gambar 3.46.
96
Mulai
Panggil ForcedFlushAll() dari pointer Vertex Manager global
Cek variabel global apakah dapat melakukan Shader?
Ya
A Panggil SetTransform() dari pointer D3D Device dan matriks World global sebagai param
R
Selesai
SU
Panggil CalcWorldViewProjMatrix()
Copy matriks dari parameter simpan ke dalam matriks World global
Panggil SetVertexShaderConstantF() dari pointer D3D Device dan Transpose matriks WorldViewProj global sbg param
AB
Tidak
AY
Ya
Cek apakah matriks World dari param kosong?
Buat matriks identitas lalu copy ke dalam matriks World global
Tidak
M
Gambar 3.46. Flowchart Operasi SetWorldTransform()
O
3.5.18. Flowchart Operasi ActivateVShader() Operasi ini bertugas untuk mengaktifkan obyek verteks shader yang di
IK
buat sebelumnya pada obyek device. Operasi ActivateVShader() merupakan
ST
bagian dari kelas TumozD3D. Pada dasarnya obyek verteks shader dapat di buat
lebih dari satu karena hal ini ditujukan untuk membuat bermacam-macam efek khusus ketika proses rendering dan operasi ini yang menentukan shader aktif berdasarkan idnya. Operasi ini dibagi menjadi tiga proses yaitu memanggil fungsi ForcedFlushAll() untuk membersihkan buffer verteks, lalu memanggil fungsi
97
obyek device SetVertexDeclaration() untuk menentukan ukuran dan format verteks yang akan diproses oleh shader, dan terakhir memanggil fungsi obyek device SetVertexShader() yaitu untuk mengaktifkan verteks shader berdasarkan
A
obyek verteks shader yang diinginkan. Untuk lebih jelasnya flowchart dari operasi
Tidak Cek apakah ID Vertex Shader >= jumlah Vertex Shader yang ada?
Cek variabel global apakah Shader dapat tidak dapat digunakan?
Ya
Cek pemanggilan SetVertexShader() dari pointer D3D Device dgn pointer Vertex Shader indeks ID dr param gagal?
Tidak
R Ya
O
M
Return TUMOZ_NOSHADER SUPPORT
Tidak
Cek apakah Vertex ID dari param valid?
SU
Return TUMOZ_INVALIDID
Ya
Cek apakah pemanggilan SetVertexDeclaration() dari pointer D3D Device gagal?
Tidak
Ya Ya Return TUMOZ_FAIL
IK
ST
Tidak
Panggil ForcedFlushAll() dari pointer Vertex Manager global
AB
Mulai
AY
ini dapat dilihat pada gambar 3.47.
Set satus variabel sedang digunakan global == true
Set variabel Vertex Shader aktif global == ID dari param
Selesai Return TUMOZ_OK
Gambar 3.47. Flowchart Operasi ActivateVShader()
98
3.5.19. Flowchart Operasi Render() Operasi ini merupakan operasi yang panjang dan rumit yang bertugas untuk merender buffer statis (verteks dan indeks) yang telah dibuat sebelumnya
A
berserta skin yang berhubungan dengan buffer tersebut. Operasi Render() adalah
dari interface TumozVertexCacheManager. Pertama-tama
operasi
ini
dimulai
AY
operasi dari kelas TumozD3DVCManager yang juga merupakan operasi turunan
dengan
memanggil
fungsi
AB
GetShadeMode() dari obyek TumozD3D untuk memeriksa jenis render state yang akan digunakan dalam merender buffer statis apakah dalam bentuk solid, berjaring (wired), garis, titik, dan sebagainya. Setelah itu mengaktifkan buffer
R
indeks dengan menggunakan fungsi SetIndices() dari obyek device.
SU
Proses selanjutnya dari operasi ini adalah pengaturan skin yang akan digunakan baik dengan atau tanpa shader. Proses tersebut terdiri dari proses mengatur material dengan memanggil fungsi SetMaterial(), mengatur tekstur
M
menggunakan fungsi SetTexture(), dan mengatur kondisi alpha untuk efek
O
transparansi menggunakan fungsi SetRenderState() dari obyek device. Tahapan berikutnya dilanjutkan dengan mengatur FVF menggunakan
IK
fungsi SetFVF() dari obyek device apabila shader tidak digunakan. Setelah itu
melakukan pengaturan additive blending dan buffer warna (color buffer) untuk
ST
rendering dengan memanggil fungsi SetRenderState() dari obyek device. Dan terakhir adalah menggambar (render) buffer statis baik yang
menggunakan buffer indeks maupun tidak dengan menggunakan fungsi DrawIndexedPrimitive() dan DrawPrimitive() dari obyek device berdasarkan jenis
99
masing-masing render statenya. Detil dari proses flowchart operasi ini digambarkan pada gambar 3.48., 3.49. dan 3.50. Mulai
Buat variabel sementara seperti Hresult hr & int iT
Tidak
Ya
Cek pointer Static Buffer pada indeks ID dari param menggunakan Index buffer?
Cek pointer Static Buffer pada indeks ID dari param menggunakan Index buffer?
Tidak
Ya
Cek pemanggilan GetActiveSkinID() dari pointer TumozD3D != atribut SkinID dari pointer Static Buffer bdsrkan ID param?
Tidak
AB
Ya Panggil SetIndices() dari pointer D3D Device dengan data IB sbg parameter dari pointer Static Buffer global berdasarkan ID param
Panggil SetIndices() dari pointer D3D Device dengan data IB sbg parameter dari pointer Static Buffer global berdasarkan ID param
Panggil SetStreamSource() dari pointer D3D Device dengan data Vertex Buffer sbg parameter dari pointer Static Buffer berdasarkan ID param
Ya
Buat pointer lokal TUMOZSKIN pSkin berisi data Skin dari Skin Manager dengan indeks dari ID Skin Static Buffer
R
Cek ID dari param >= jumlah Static buffer yang ada?
Tidak
Ya
Tidak Set variabel ActiveCache global ke MAX_ID
Tidak
AY
Panggil GetShadeMode() dari pointer global TumozD3D dan simpan dalam TUMOZRENDERSTATE sm
A
Cek variabel global ActiveIB != MAX_ID?
A
Cek variabel global ActiveSB != ID dari param?
Set variabel global ActiveIB = MAX_ID
SU
Ya error: ID Buffer Statis Tidak Valid
Set variabel ActiveSB global mengarah pada ID dari parameter
M
Return TUMOZ_INVALID PARAM
O
sm == RS_SHADE_ SOLID
Tidak
Panggil GetWireColor() dari pointer TumozD3D dan simpan hasillnya ke TUMOZCOLOR clrWire sbg warna Wireframe
Buat D3DMATERIAL9 matW yang berisi warna RGBA masing-masing material Diffuse, dan Ambient dari clrWire
IK
Selesai
Cek TumozD3D tidak menggunakan Shader?
Ya
ST
Buat pointer lokal TUMOZMATERIAL pMat berisi data Material dari Skin Manager dengan indeks dari pSkin->nMaterial
Tidak
Panggil SetShaderConstant() dari TumozD3D untuk warna material Ambient, Diffuse, Specular dan Emissive berasal dari pMat
Panggil SetMaterial() dari pointer D3D Device dengan matW sbg parameter
Cek TumozD3D menggunakan Texture?
Panggil SetTexture() dari D3D Device dengan indeks 0 dan NULL sbg parameter
Panggil SetMaterial() dari pointer D3D Device dengan mat sbg parameter
Ya
Buat D3DMATERIAL9 mat yang berisi warna RGBA masing-masing material Diffuse, Ambient, Specular, Emissive dan Specular Power dari pMat
Tidak
Ya B
Gambar 3.48. Flowchart Operasi Render()
C
100
iT = 0
Panggil SetTextureStageState() dari D3D Device dgn indeks 1 dan Perintah Disable Operasi Texture sbg parameter
C
Panggil SetTextureStageState() dari Tidak D3D Device dgn indeks iT dan Perintah Disable Operasi Texture sbg parameter
iT < 8
pSkin>bAlpha
Ya
Ya
pSkin-> nTexture[iT] != MAX_ID
Panggil SetRenderState() dari D3D Device dan beberapa perintah untuk mengaktifkan Alpha Blending
Tidak
break
Ya Panggil SetActiveSkinID() dari TumozD3D dengan attribut SkinID dari pointer Static Buffer indeks ID dari parameter
AB
Panggil SetTexture() dari D3D Device dgn indeks iT dan data texture dari Skin Manager sbg parameter
Cek pemanggilan UsesShaders() dari pointer TumozD3D apakah tidak menggunakan Shader?
SU
Tidak A
iT++
Ya
Panggil SetFVF() dari D3D Device dengan data FVF dari Static Buffer indeks ID sbg parameter
O
Tidak
IK
sm == RS_SHADE_ POINTS
Tidak
Tidak
Cek attribut bIndis dari pointer Static Buffer true?
M D
Panggil DrawIndexedPrimitive() dari D3D Device dgn D3DPT_TRIANGLELIST, Jml Verts dan Jml Tris dari pointer Static buffer sbg param dan simpan hasilnya ke hr
R
Panggil SetTextureStageState() dari D3D Device dgn indeks iT dan Beberapa Perintah Operasi Texture sbg parameter
ST
Panggil SetRenderState() dari D3D Device dan Tidak beberapa perintah untuk menonaktifkan Alpha Blending
A
Ya
AY
B
Return hr
Ya
Tidak
sm == RS_SHADE_ LINES
Tidak
sm == RS_SHADE_ HULLWIRE
Ya
Ya
Ya
Panggil DrawPrimitive() dari D3D Device dgn D3DPT_POINTLIST dan Jumlah Verts dari pointer Static buffer sbg param dan simpan hasilnya ke hr
Panggil DrawIndexedPrimitive() dari D3D Device dgn D3DPT_LINELIST, Jml Verts dan Jml Indis/2 dari pointer Static buffer sbg param dan simpan hasilnya ke hr
Panggil DrawIndexedPrimitive() dari D3D Device dgn D3DPT_LINESTRIP dan Jml Verts dari pointer Static buffer sbg param dan simpan hasilnya ke hr
Gambar 3.49. Lanjutan Flowchart Operasi Render()
Selesai
101
sm == RS_SHADE_ POINTS
D
sm == RS_SHADE_ LINES
Tidak
sm == RS_SHADE_ HULLWIRE
Tidak
Tidak
Ya
Ya
Panggil DrawPrimitive() dari D3D Device dgn D3DPT_POINTLIST dan Jumlah Verts dari pointer Static buffer sbg param dan simpan hasilnya ke hr
Panggil DrawPrimitive() dari D3D Device dgn D3DPT_LINELIST dan Jumlah Verts/2 dari pointer Static buffer sbg param dan simpan hasilnya ke hr
Panggil DrawPrimitive() dari D3D Device dgn D3DPT_LINESTRIP dan Jumlah Verts dari pointer Static buffer sbg param dan simpan hasilnya ke hr
R
Return hr
AB
AY
Ya
Panggil DrawPrimitive() dari D3D Device dgn D3DPT_TRIANGLELIST dan Jumlah Tris dari pointer Static buffer sbg param dan simpan hasilnya ke hr
A
Tidak
SU
Selesai
3.6.
M
Gambar 3.50. Lanjutan Flowchart Operasi Render()
Component Diagram
O
Komponen perangkat lunak merupakan modul fisik dari sebuah sistem
kode.
Diagram
komponen
menggambarkan
bagaimana
komponen
IK
atau
dihubungkan bersama untuk membentuk komponen yang lebih besar dan atau
ST
sistem perangkat lunak agar dapat menjelaskan hubungan antar mereka. Diagram komponen Framework Tumoz Rendering Engine pada gambar
3.51. menjelaskan bahwa sistem terbagi dalam kelompok paket-paket atau subsistem yang terdiri dari TumozRenderer, TumozD3D, Tumoz3D dan TumozGeneral. Masing-masing paket atau subsistem tersebut memiliki fungsi dan tugas masing-masing dan saling berhubungan antara satu dengan yang lain.
102
MFC 6.0
TumozD3D
Tumoz3D
AY
A
TumozRenderer
DirectX 9.0
AB
TumozGeneral
R
Gambar 3.51. Component Diagram Tumoz Rendering Engine
Selain itu sistem ini juga membutuhkan komponen atau sistem dari luar
SU
untuk membantu proses kerja pada sistem internal. Komponen DirectX 9.0 merupakan komponen SDK (Software Development Kit) untuk menyediakan komponen yang menghubungkan API Direct3D dengan paket atau subsistem
M
TumozD3D.
komponen
MFC
6.0
merupakan
komponen
untuk
O
Sedangkan
menyediakan sistem pengembangan yang berhubungan dengan API windows dan
IK
hal-hal penting lainnya. Komponen tersebut memiliki relasi dan dibutuhkan oleh
ST
paket atau subsistem TumozD3D, Tumoz3D dan TumozGeneral. Diagram komponen pada gambar 3.51. merupakan gambaran umum dari
keseluruhan sistem dan berikut ini merupakan penjelasan detil dari hubungan antar komponen pada masing-masing paket atau subsistem di dalam Framework Tumoz Rendering Engine.
103
3.6.1. Component Diagram TumozRenderer Komponen bisa mencantumkan pustaka kode program dan berkas-berkas runtime sekaligus. Misalnya, pada bahasa pemrograman C++, setiap berkas .cpp
A
dan .h adalah komponen yang berbeda seperti yang digambarkan pada gambar 3.52.
AY
Gambar 3.52. merupakan ilustrasi diagram komponen dari paket atau subsistem TumozRenderer. Komponen dari paket atau subsistem TumozRenderer
TumozRenderer.lib.
TumozRenderer.h
SU
R
TumozRenderDevice.h
AB
terdiri dari TumozRenderDevice.h, TumozRenderer.h, TumozRenderer.cpp, dan
TumozRenderer.cpp
ST
IK
O
M
TumozRenderer.lib
Gambar 3.52. Component Diagram TumozRenderer
Paket atau subsistem TumozRenderer berisi komponen-komponen yang
berfungsi sebagai interface bagi framework engine dan mengatur hubungan
dengan komponen implementasi API Direct3D pada paket atau subsistem TumozD3D.
104
TumozRenderDevice.h dan TumozRenderer.h merupakan file header atau package specification yang digunakan sebagai referensi (include) bagi pengguna framework agar dapat menggunakan interface render device. Sedangkan
A
file TumozRenderer.cpp merupakan package body atau kode sumbernya (source code). Dan hasil kompilasi dari file-file tersebut akan menjadi static libary
framework.
AB
3.6.2. Component Diagram TumozD3D
AY
TumozRenderer.lib yang akan digunakan sebagai file linker bagi pengguna
Diagram komponen pada paket atau subsistem TumozD3D merupakan
R
diagram yang menggambarkan relasi komponen-komponen implementasi dari
framework engine.
SU
interface paket atau subsistem TumozRenderer berdasarkan API Direct3D pada
Seperti yang terlihat pada gambar 3.53. bahwa komponen package
M
spesification atau file header dari paket atau subsistem TumozD3D terdiri dari Tumoz.h, TumozD3D.h, TumozD3DVCache.h, TumozD3DSkinManager.h, dan
O
resource.h. Sedangkan komponen untuk package body atau file kode sumbernya
IK
terdiri dari TumozD3DInit.cpp, TumozD3DMain.cpp, TumozD3DEnum.cpp, TumozD3DMisc.cpp, TumozD3DVCache.cpp, dan TumozD3DSkinManager.cpp.
ST
Berbeda dengan paket atau subsistem yang lain bahwa hasil kompilasi
dari paket atau subsistem TumozD3D akan menjadi file dynamic link library TumozD3D.dll. File dynamic link library tersebut merupakan putaka kode
dinamis yang akan dipilih oleh user untuk menjadi subsistem implementasi dari interface pada subsistem TumozRenderer.
105
TumozD3DMisc.cpp
TumozD3DInit.cpp
TumozD3D.dll
A
TumozD3D.h
AY
TumozD3DMain.cpp
resource.h
TumozD3DSkinManager.cpp
AB
Tumoz.h
TumozD3DVCache.h
TumozD3DSkinManager.h
M
SU
TumozD3DVCache.cpp
R
TumozD3DEnum.cpp
O
Gambar 3.53. Component Diagram TumozD3D
IK
3.6.3. Component Diagram Tumoz3D Diagram komponen pada paket atau subsistem Tumoz3D merupakan
ST
kumpulan dari relasi komponen-komponen yang berisi kode pustaka untuk algoritma-algoritma dan perhitungan matematika yang berhubungan dengan tiga dimensi. Relasi antar komponen tersebut dapat dilihat pada gambar 3.54. Seperti yang digambarkan pada gambar 3.54, hanya ada satu komponen package spesification atau file header dari paket atau subsistem Tumoz3D yaitu Tumoz3D.h. Komponen tersebut mendefinisikan semua kelas dan operasi yang
106
ada di dalam paket atau subsistem Tumoz3D dan juga menjadi acuan bagi semua komponen kode sumber dari subsistem tersebut.
TumozOBB.cpp
TumozPlane.cpp
TumozPolylist.cpp
AY
A
TumozOctree.cpp
TumozPolygon.cpp
TumozMatrix.cpp
AB
Tumoz3D.h
TumozBSPTree.cpp
R
TumozRay.cpp
TumozVector.cpp
TumozQuat.cpp
Tumoz3D.lib
O
M
SU
TumozAABB.cpp
TumozCPU.cpp
IK
Gambar 3.54. Component Diagram Tumoz3D
Sedangkan untuk komponen package body atau file kode sumber dari
ST
paket atau subsistem Tumoz3D terdiri dari TumozCPU.cpp, TumozVector.cpp, TumozMatrix.cpp, TumozPolylist.cpp,
TumozRay.cpp,
TumozPlane.cpp,
TumozAABB.cpp,
TumozOctree.cpp, dan TumozBSPTree.cpp.
TumozPolygon.cpp,
TumozOBB.cpp,
TumozQuat.cpp,
107
Masing-masing komponen package body tersebut mewakili kode sumber untuk kelas dan algoritma perhitungan matematika tiga dimensi dan di tambah dengan file kode sumber TumozCPU.cpp yang berisi fungsi-fungsi untuk
A
mengaktifkan CPU matematika cepat SIMD. Hasil kompilasi dari seluruh komponen dari paket atau subsitem Tumoz3D tersebut menjadi static library
AY
Tumoz3D.lib.
3.6.4. Component Diagram TumozGeneral
AB
Gambar 3.55. mengilustrasikan bentuk relasi dari diagram komponen
TumozGeneral yang merupakan paket atau subsistem yang berisi komponen-
R
komponen untuk kendali pergerakan, kamera dan informasi-informasi yang
SU
dibutuhkan lainnya dalam proses rendering.
Komponen-komponen package spesification atau file header dari paket atau
subsistem
TumozGeneral
terdiri
TumozMCEgo.h,
dari
TumozGeneral.h,
TumozMCFree.h,
dan
M
TumozMovementController.h,
tersebut
TumozTimer.h.
O
Perlu diketahui bahwa file header TumozGeneral.h hanya berisi referensi
IK
(include) file-file header yang lainnya dan juga tidak berisi definisi kelas, fungsi, variabel dan lain-lain. Hal ini ditujukan agar file header TumozGeneral.h menjadi
ST
acuan utama bagi pengguna framework dalam menggunakan subsistem TumozGeneral. Pada gambar 3.55. menunjukkan bahwa komponen package body atau
file kode sumber dari paket atau subsistem TumozGeneral terdiri dari
TumozMovementController.cpp, TumozMCEgo.cpp, TumozMCFree.cpp, dan
108
TumozTimer.cpp. Dan sedangkan hasil kompilasinya berupa static library TumozGeneral.lib.
TumozMovementController.h
TumozTimer.h
TumozMCFree.h
R
TumozTimer.cpp
SU
TumozMCEgo.cpp
TumozGeneral.h
AB
TumozMCEgo.h
AY
A
TumozGeneral.lib
TumozMovementController.cpp
ST
IK
O
M
TumozMCFree.cpp
Gambar 3.55. Component Diagram TumozGeneral