bab iii perancangan sistem analisa identifikasi ...sir.stikom.edu/592/6/bab iii.pdf · time...
TRANSCRIPT
33
BAB III
PERANCANGAN SISTEM
3.1. Analisa Identifikasi Permasalahan
Dalam mengembangkan aplikasi berbasis tiga dimensi pihak
pengembang biasanya memerlukan suatu alat (tool) yang dapat berupa API yang
berfungsi untuk menghubungkan antara perangkat lunak yang dikembangkan
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:
enumerasi device rendering, pengaturan tampilan, mengolah data primitif tiga
dimensi, menghitung posisi model, menampilkan gambar ke layar, memproses file
tekstur, dan sebagainya.
API tersebut dari awal ditujukan sebagai antarmuka (interface) untuk
perangkat grafis tiga dimensi. Dengan demikian tahapan-tahapan dalam
pengolahannya menyesuaikan urutan proses yang panjang dalam hardware grafis
tiga dimensi tersebut. Contohnya pada gambar tahapan proses pada API Direct3D
(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]
STIKOM S
URABAYA
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.
Setelah itu tesselator unit akan mengkonversi urutan dari atas ke bawah data
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
diaplikasikan ke verteks yang kemudian disimpan di verteks buffer. Selanjutnya
tahap Geometry Processing akan melakukan beberapa proses yang meliputi
clipping, backface culling, evaluasi atribut, dan rasterization yang kemudian
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
berupa nilai warna pixel (pixel color values). Dan terakhir pada tahapan Pixel
Rendering merupakan proses rendering akhir yang memodifikasi warna pixel
dengan nilai alpha, depth (kedalaman), stencil testing, blending dan fog lalu
semua hasil nilai pixel akan ditampilkan ke output display (layar). Tahapan-
tahapan pipeline grafis tersebut harus dilalui untuk menghasilkan gambar tiga
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
STIKOM S
URABAYA
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
rendering, dan perhitungan matematika dalam mengolah data tiga dimensi. Serta
tidak adanya manajemen untuk mengelola sumber daya yang saling terintegrasi
antara perangkat lunak yang dikembangkan oleh pihak pengembang dengan
perangkat keras grafis tiga dimensi yang disediakan.
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
framework dinilai dapat sangat bermanfaat untuk pengembangan aplikasi karena
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
menyediakan class-class yang berisi perintah dan fungsi-fungsi yang hanya
dibutuhkan oleh pihak pengembang untuk membuat suatu aplikasi berbasis tiga
dimensi. Sedangkan rendering engine berfungsi sebagai manjemen pengelolaan
sumber daya dari aplikasi yang dibuat ketika ditampilkan di layar (secara
realtime). Rendering engine juga melakukan fungsi-fungsi tertentu (khusus)
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
STIKOM S
URABAYA
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
dikembangkannya sesuai dengan yang diharapkan.
3.2. Algoritma Manajemen Scene
Dalam proses rendering algoritma manajemen scene merupakan instrumen
yang sangat penting jika ingin menampilkan menampilkan lebih dari ratusan ribu
polygon segitiga yang membentuk obyek-obyek 3D ke dalam layar. Hal ini
dikarenakan keterbatasan dari pengolahan yang dapat dilakukan oleh kartu grafis
yang ada saat ini. Algoritma tersebut membantu memilih polygon yang diperlukan
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
yang akan digunakan oleh framework rendering engine ini adalah Octree dan BSP
Tree.
3.2.1. Algoritma Octree
Octree merupakan salah satu algoritma manajemen scene yang umumnya
digunakan untuk area outdoor. Algoritma tersebut akan membagi menjadi 8
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.
STIKOM S
URABAYA
37
Gambar 3.2 Flowchart Pembuatan Algoritma Octree
Mulai
Load seluruh polygon
Buat obyek Octree
Set Octree menjadi Root
Daftarkan polygon & jumlahnya ke dalam
Octree
Kalkulasi Bounding Box Root
Cek apakah jumlah polygon > 10
Inisialisasi Child berdasarkan ID dan
Parentnya sebanyak 8 bagian
Proses memisahkan polygon berdasarkan Bounding Box Child
Ya
Rekursif Pembuatan Child
SelesaiTidak
STIKOM S
URABAYA
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
pointer array TumozPolygon).
2. Proses selanjutnya adalah membuat obyek Octree yang ditujukan untuk
membangun tree baru berdasarkan polygon yang ada.
3. Polygon-polygon yang telah di muat kemudian didaftarkan pada Octree
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
agar menjadi acuan bagi semua child (simpul anak).
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)
agar nanti dapat dikelompokkan berdasarkan posisisnya dan untuk
mengetahui ruang lingkup dari tiap simpul.
6. Setelah itu melakukan pemeriksaan jumlah anggota simpul yaitu polygon-
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
STIKOM S
URABAYA
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
Laut Bawah (LW_NE), Barat Laut Bawah (LW _NW), Tenggara Bawah
(LW _SE), dan Barat Daya Bawah (LW _SW).
8. Apabila child telah diinisialisasi maka dilanjutkan dengan proses
memotong atau mengelompokkan polygon-polygon berdasarkan ruang
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
menerus sampai memenuhi kondisi dimana jumlah polygon tidak melebihi
batas yang telah ditentukan yaitu 10 polygon pada langkah ke 6.
3.2.2. Algoritma BSP Tree
Berbeda dengan Octree, BSP Tree (Binary Space Partitioning Tree)
merupakan algoritma manajemen scene yang sangat efektif digunakan untuk area
indoor. Prinsip dari BSP Tree adalah membagi menjadi 2 kelompok simpul kecil
dari kelompok-kelompok polygon secara rekursif. Dan hampir sama dengan
Octree hasil dari BSP Tree tersebut dapat diuji persimpangannya dan juga dapat
melakukan traversal ke dalam simpul-simpul agar dapat ditampilkan ke layar.
Berikut adalah pembuatan algoritma BSP Tree berdasarkan inputan polygon. STIKOM S
URABAYA
40
Mulai
Load seluruh polygon
Buat obyek BSP Tree
Daftarkan polygon & jumlahnya ke dalam
BSP Tree
Set BSP Tree menjadi Root & Parent = NULL
Kalkulasi Bounding Box simpul ini
Mengklasifikasikan kelompok polygon
dan mendaftarkan ke Front dan Back Child
Membuat obyek child baru BSP Tree Front
dan Back
Rekursif Front & Back Child
Splitter terbaik ditemukan?
Ya
SelesaiTidak
Gambar 3.3 Flowchart Pembuatan Algoritma BSP Tree
STIKOM S
URABAYA
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
TumozPolygon).
2. Membuat obyek BSP Tree yang ditujukan untuk membangun tree baru
berdasarkan polygon yang ada atau polygon yang di muat sebelumnya.
3. Polygon-polygon yang telah di muat tersebut kemudian didaftarkan pada
BSP Tree yang baru dibuat dan sekaligus memasukkan jumlahnya sebagai
parameter.
4. BSP Tree yang di buat tersebut kemudian dijadikan simpul root dan
simpul parent di set menjadi NULL yang menandakan bahwa simpul
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)
pada simpul ini. Tujuan dari proses tersebut adalah untuk mengetahui
ruang lingkup dari tiap simpul.
6. Proses selanjutnya adalah mencari splitter terbaik dari simpul ini. Splitter
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
STIKOM S
URABAYA
42
perulangan terhadap polygon dari daftar, dan klasifikasikan masing-
masing polygon terhadap polygon yang sebelumnya dianggap sebagai
splitter. Hitung berapa banyak polygon yang berada di sisi depan, di sisi
belakang, dan berapa banyak polygon yang terpisah. Ketika inner loop
selesai, hitung skor dari polygon yang seharusnya menjadi splitter dan
bandingkan skor tersebut terhadap skor terbaik (terendah) yang dapat
ditemukan. Dan arahkan pointer ke skor terendah karena semakin tinggi
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.
7. Setelah itu dilanjutkan dengan membuat obyek child BSP Tree baru yaitu
front (simpul depan) dan back (simpul belakang) dan mengatur simpul ini
sebagai parentnya.
8. Berdasarkan splitter terbaik yang telah ditemukan, maka proses
selanjutnya adalah mengklasifikasikan splitter tersebut terhadap daftar
polygon yang ada pada simpul ini. Apabila polygon ada di depan dari
spliter, maka masukkan ke dalam daftar polygon dari child front. Untuk
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
STIKOM S
URABAYA
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
polygon selesai maka masing-masing child front dan back akan melakukan
proses rekursif kembali ke langkah ke 5, dan menjadikan child tersebut
menjadi parent bagi child dibawahnya secara terus menerus sampai
memenuhi kondisi tidak menemukan splitter terbaik pada langkah ke 5.
3.3. Perancangan Sistem
Berdasarkan analisa identifikasi permasalahan yang telah dilakukan
sebelumnya bahwa Framework rendering engine ini dibangun menggunakan API
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
rancang bangun yang akan dibuat digambarkan seperti gambar di bawah ini:
Aplikasi Berbasis 3D
Static Library Tumoz3D.lib untuk
Matematika & Algoritma 3D
Static Library TumozGeneral.lib untuk
Kontrol Pergerakan, Kamera dsb
Static Library TumozRenderer.lib
untuk interface Sistem Rendering
Dynamic Library TumozD3D.dll untuk implementasi Sistem
Rendering
Render Interface
Buat Obyek Beri Device
LoadImplemen
Gunakan
Gunakan Gunakan
Gunakan
Gunakan
Gambar 3.4. Gambaran Umum Rancang Bangun Sistem
STIKOM S
URABAYA
44
Pada gambar diatas sistem dijelaskan menjadi beberapa tahapan sebagai
berikut:
1. Pihak developer yang mengembangkan aplikasi berbasis 3D dapat
menggunakan tiga library yang disediakan dari framework ini antara lain
TumozRenderer.lib, Tumoz3D.lib, dan TumozGeneral.lib.
2. Aplikasi pengembangan membuat obyek dari TumozRenderer.lib sebagai
library utama untuk menjalankan engine. Kemudian aplikasi tersebut
memberikan permintaan device yang dibutuhkan berdasarkan API.
3. TumozRenderer.lib berfungsi sebagai interface dan class abstrak
sedangkan fungsi-fungsi utama rendering engine dalam melakukan
komunikasi dengan API berada didalam TumozD3D.dll. Dengan demikian
ketika obyek dibuat pada aplikasi pengembangan secara otomatis
TumozRenderer.lib memuat (load) TumozD3D.dll.
4. TumozD3D.dll melakukan implementasi pada obyek Render Device
sehingga fungsi-fungsinya dapat digunakan oleh aplikasi pengembangan.
Tugas dari render device tersebut antara lain insialisasi rendering,
menentukan resolusi, penggunaan shader, melakukan proses-proses yang
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.
STIKOM S
URABAYA
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
mengembangkan aplikasi berbasis 3D.
7. Selain Tumoz3D.lib aplikasi pengembangan juga dapat menggunakan
library TumozGeneral.lib yang berisi class dan fungsi untuk manajemen
scene, kontrol pergerakan dan informasi yang dibutuhkan dalam proses
rendering.
8. TumozD3D.dll juga menggunakan library Tumoz3D.lib dan
TumozGeneral.lib dalam melakukan perhitungan matematika dan
algoritma serta fungsi-fungsi yang diperlukan lainnya untuk memproses
dan menjalankan sistem rendering engine.
3.4. Class Diagram
Class diagram atau diagram kelas digunakan untuk menampilkan kelas-
kelas atau paket-paket di dalam sistem dan relasi antar mereka. Relasi antar kelas
pada Framework Tumoz Rendering Engine diilustrasikan sebagai berikut:
STIKOM S
URABAYA
46
Gambar 3.5. Class Diagram Tumoz Rendering Engine
TumozMCEgo(from TumozGeneral)
TumozTimer(from TumozGeneral)
TumozMCFree(from TumozGeneral)
TumozSkinManager(from TumozRenderer)
TumozVertexCacheManager(from TumozRenderer)
TumozRenderer(from TumozRenderer)
TumozRenderDevice(from TumozRenderer)
11 11 1 11 1
dibuat oleh
TumozD3DSkinManager(from TumozD3D)
TumozD3DVCManager(from TumozD3D)
TumozD3DVCache(from TumozD3D)
1
*
1
*
TumozPolylist(from Tumoz3D)
TumozOctree(from Tumoz3D)
TumozPolygon(from Tumoz3D)
1
*
1
*membangun
TumozBSPTree(from Tumoz3D)
membangun
TumozD3DEnum(from TumozD3D)
TumozPlane(from Tumoz3D)
memotong
membagi
TumozAabb(from Tumoz3D)
membatasi
membatasi
membatasiTumozObb
(from Tumoz3D)
TumozRay(from Tumoz3D)
TumozMovementController(from TumozGeneral)
TumozD3D(from TumozD3D)
1 11 1
digunakan
TumozVector(from Tumoz3D)
digunakan
mengatur
bersimpanganbersimpangan
bersimpangan
menghitung
TumozQuat(from Tumoz3D)
TumozMatrix(from Tumoz3D)
digunakan
mentrasformasi
dirubah ke
STIKOM S
URABAYA
47
Gambar 3.5. menunjukkan bahwa Framework Tumoz Rendering Engine
menyediakan 3 kelas abstrak utama yang berfungsi sebagai interface yaitu
TumozRenderDevice, TumozSkinManager, dan TumozVertexCacheManager.
Implementasi dari masing-masing interface tersebut mengarah pada kelas
implementasi yang mengacu pada referensi API Direct3D yaitu TumozD3D,
TumozD3DSkinManager, dan TumozD3DVCManager. Karena interface tersebut
bersifat dinamis (dynamic link library) maka kelas TumozRenderer bertugas
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
kelas TumozD3DEnum yang merupakan bagian dari TumozD3D.
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
dan algoritma tiga dimensi adalah: TumozQuat, TumozRay, TumozPolygon,
TumozAabb, TumozObb, TumozBSPTree, dan TumozOctree. Juga berserta kelas
TumozPolylist yang memiliki anggota dari kelas TumozPolygon.
Kelas TumozVector memiliki beberapa peranan penting dalam
penggunaan algoritma dan perhitungan tiga dimensi. Salah satunya adalah kelas
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
STIKOM S
URABAYA
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
kelas TumozQuat yang dapat mengubah (konversi) nilai-nilai dari kelas
TumozMatrix untuk menghitung rotasi obyek tiga dimensi.
Seperti yang terlihat pada gambar 3.5, kelas TumozMovementController
mempunyai dua kelas turunan yaitu kelas TumozMCEgo dan TumozMCFree.
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
secara detil fungsionalitas dari masing-masing kelas di dalam Framework Tumoz
Rendering Engine.
3.4.1. Class TumozRenderer
Kelas TumozRenderer mempunyai beberapa atribut dan operasi untuk
menentukan jenis API yang ingin dijadikan implementasi agar dapat dibuatkan
obyeknya dan dihubungkan ke dalam interface. Untuk lebih jelasnya dapat dilihat
pada gambar 3.6.
Gambar 3.6. Class TumozRenderer
STIKOM S
URABAYA
49
3.4.2. Class TumozRenderDevice
Kelas TumozRenderDevice merupakan interface yang ditujukan untuk
menjadi acuan (prototype) bagi kelas implementasi yang paling utama yang
bertugas dalam mengelola perangkat rendering. Acuan itu berupa atribut dan
operasi-operasi virtual yang berhubungan dengan pengolahan perangkat rendering
seperti inisialisasi perangkat grafis rendering, menjalankan dan menghentikan
proses rendering, mengatur pencahayaan, membuat obyek manajer verteks dan
manajer skin dan sebagainya. Untuk lebih jelasnya dapat dilihat pada gambar 3.7.
Gambar 3.7. Class TumozRenderDevice
STIKOM S
URABAYA
50
3.4.3. Class TumozVertexCacheManager
Kelas TumozVertexCacheManager memiliki peranan yang hampir sama
dengan kelas TumozRenderDevice yaitu sebagai interface yang berfungsi sebagai
prototype bagi kelas implementasi yang memanajemen pengelolaan hal-hal yang
berhubungan dengan verteks. Operasi-operasi yang ada terdiri dari pembuatan
buffer (memory penyimpanan) verteks statis dan buffer indeks, merender masing-
masing verteks baik dalam bentuk titik, garis, ataupun polygon, mengirim konten
verteks dan indeks dari buffer ke perangkat rendering agar dapat di gambar,
validasi kondisi atau status verteks, dan lain-lain. Untuk lebih jelasnya dapat
dilihat pada gambar 3.8.
Gambar 3.8. Class TumozVertexCacheManager
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
STIKOM S
URABAYA
51
disebut skin (kulit) dari obyek tiga dimensi. Bentuk struktur dari kelas
TumozSkinManager adalah sebagai berikut:
Gambar 3.9. Class TumozSkinManager
Seperti pada gambar 3.9. operasi-operasi yang tersedia pada kelas
TumozSkinManager antara lain menambah dan mengganti skin atau tekstur dari
obyek tiga dimensi, mengubah warna material, membandingkan warna material,
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
STIKOM S
URABAYA
52
referensi dari API Direct3D. Kelas TumozD3D mengelola hampir seluruh proses
penting yang ada di dalam Framework Tumoz Rendering Engine. Dan struktur
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.
STIKOM S
URABAYA
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
contohnya fungsi OneTimeInit(), Go(), Log(), dan sebagainya.
3.4.6. Class TumozD3DSkinManager
Kelas TumozD3DSkinManager adalah kelas implementasi dari interface
TumozSkinManager yang menggunakan API Direct3D. Fungsi dari kelas
TumozD3DSkinManager sama dengan interface TumozSkinManager yang telah
dijelaskan sebelumnya disertai dengan atribut dan operasi tambahan untuk
penerapan internal sistem. Untuk lebih jelasnya dapat dilihat pada gambar 3.11.
Gambar 3.11. Class TumozD3DSkinManager
STIKOM S
URABAYA
54
3.4.7. Class TumozD3DVCManager
Seperti kelas TumozD3D dan TumozD3DSkinManager bahwa
TumozD3DVCManager juga merupakan kelas implementasi API Direct3D dari
interface TumozVertexCacheManager. Struktur kelasya adalah sebagai berikut:
Gambar 3.12. Class TumozD3DVCManager
STIKOM S
URABAYA
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
kelas TumozD3DVCManager hanya menyediakan 6 pilihan pada atribut format
verteks yaitu:
1. Position Untransformed Vertex (PS) adalah format verteks yang hanya
berisi data posisi saja tanpa adanya transformasi.
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.
3. Unstransformed and Lit Vertex (UL) yaitu merupakan format verteks yang
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.
4. Character Animation (CA) adalah format verteks yang berisi data posisi,
vektor normal, dan koordinat tekstur. Biasanya digunakan untuk
menggambarkan animasi karakter.
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.
STIKOM S
URABAYA
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
class) yaitu kelas TumozD3DVCache yang akan dijelaskan di bawah ini.
3.4.8. Class TumozD3DVCache
Kelas TumozD3DVCache merupakan kelas untuk mengelola
sekelompok data verteks secara individual. Atribut-atribut dan operasi-operasi
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
sebagainya. Untuk lebih jelasnya dapat dilihat pada gambar 3.13.
Gambar 3.13. Class TumozD3DVCache
STIKOM S
URABAYA
57
3.4.9. Class TumozVector
Kelas TumozVector merupakan kelas terpenting dalam perhitungan
geometri matematika dan algoritma tiga dimensi. Karena biasanya vektor
mewakili posisi dari suatu obyek tiga dimensi maka atributnya terdiri dari x, y, z,
dan w. Sedangkan operasi-operasinya meliputi perhitungan panjang vektor,
negasi, normalisasi, differensiasi, penambahan, pengurangan, perkalian dot
product, perkalian cross product, dan lain-lain. Untuk lebih jelasnya dapat dilihat
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
STIKOM S
URABAYA
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,
transpos, rotasi terhadap sumbu, dan sebagainya. Untuk lebih jelasnya dapat
dilihat pada gambar 3.15.
.
Gambar 3.15. Class TumozMatrix
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
STIKOM S
URABAYA
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
jelasnya dapat dilihat pada gambar 3.16.
Gambar 3.16. Class TumozQuat
3.4.12. Class TumozRay
Kelas TumozRay merupakan kelas yang mewakili suatu ray (ruas garis
yang memiliki arah) biasanya digunakan untuk teknik raycasting, menghitung
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,
STIKOM S
URABAYA
60
transformasi ray ke dalam ruang matriks, dan persimpangan dengan tiap-tiap
obyek tiga dimensi. Untuk lebih jelasnya dapat dilihat pada gambar 3.17.
Gambar 3.17. Class TumozRay
3.4.13. Class TumozPlane
Kelas TumozPlane merupakan kelas perwakilan dari suatu plane. Pada
umumnya plane digunakan untuk menghitung frustum culling, clipping,
intersection dan lain-lain. Atribut-atribut dari kelas TumozPlane adalah vektor
normal, vektor titik, dan atribut jarak d ke titik asal. Operasi-operasi pada kelas
TumozPlane meliputi pengaturan plane, klasifikasi plane, kalkulasi jarak suatu
titik ke plane, dan sebagainya. Untuk lebih jelasnya dapat dilihat pada gambar
3.18.
STIKOM S
URABAYA
61
Gambar 3.18. Class TumozPlane
3.4.14. Class TumozAabb
Kelas TumozAabb digunakan sebagai kelas perwakilan dari Axially
Aligned Bounding Box yang digunakan sebagai salah satu volume pembatas
obyek tiga dimensi. Atribut-atributnya berupa vektor minimum, vektor
maksimum, dan vektor pusat. Operasi-operasinya terdiri dari konstruksi Aabb dari
kelas TumozObb, memeriksa obyek yang akan dihilangkan (culing), mendeteksi
obyek ray yang sepenuhnya berada di dalam Aabb (contain), persimpangan
(intersection), dan sebagainya. Untuk lebih jelasnya dapat dilihat pada gambar
3.19.
STIKOM S
URABAYA
62
Gambar 3.19. Class TumozAabb
3.4.15. Class TumozObb
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
operasinya hampir sama dengan kelas TumozAabb yaitu persimpangan,
memeriksa obyek yang akan dihilangkan (culling), transformasi ke dalam ruang
matriks, fungsi bantuan proyeksi Obb, dan fungsi bantuan proyeksi segitiga.
Untuk lebih jelasnya dapat dilihat pada gambar 3.20.
STIKOM S
URABAYA
63
Gambar 3.20. Class TumozObb
3.4.16. Class TumozPolygon
Kelas TumozPolygon merupakan kelas yang mewakili suatu polygon dan
merupakan salah satu elemen dasar utama yang membentuk suatu obyek tiga
dimensi. Atribut-atribut dari kelas TumozPolygon antara lain pointer untuk
menyimpan data verteks dan indeks dari polygon, jumlah titik (verteks) dan
indeks yang berada di dalam polygon, volume pembatas Aabb, plane, dan status
dari polygon. Sedangkan operasi-operasinya yaitu pengaturan polygon,
mengkalkulasi volume pembatas, clipping, culling, intersect, dan sebagainya.
Untuk lebih jelasnya dapat dilihat pada gambar 3.21.
STIKOM S
URABAYA
64
Gambar 3.21. Class TumozPolygon
3.4.17. Class TumozPolylist
Kelas TumozPolylist merupakan kelas yang membantu untuk
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
STIKOM S
URABAYA
65
dapat menambah jumlah polygon pada polylist. Untuk lebih jelasnya dapat dilihat
pada gambar 3.22.
Gambar 3.22. Class TumozPolylist
3.4.18. Class TumozBSPTree
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
efisiensi dan efektifitas dalam proses rendering seperti pada teknik culling,
collision detection, dan sebagainya.
Atribut-atribut dari kelas TumozBSPTree terdiri dari pointer data kelas
TumozBSPTree yang berada pada kelompok depan, belakang, simpul akar, dan
simpul induk, pointer data dan jumlah polygon jika berada di node leaf, jumlah
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.
STIKOM S
URABAYA
66
Gambar 3.23. Class TumozBSPTree
3.4.19. Class TumozOctree
Kelas TumozOctree juga memiliki peranan yang hampir sama dengan
kelas TumozBSPTree yaitu berfungsi sebagai kelas algoritma diagram pohon
Octree untuk manajemen scene yang ditujukan untuk efisiensi rendering, collision
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
STIKOM S
URABAYA
67
detection terhadap ray atau polygon, fungsi penelusuran (traversal) dalam tree,
dan sebagainya. Untuk lebih jelasnya dapat dilihat pada gambar 3.24.
Gambar 3.24. Class TumozOctree
3.4.20. Class TumozMovementController
Kelas TumozMovementController merupakan kelas dasar (base class)
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
STIKOM S
URABAYA
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
nilai tambahan lainnya. Sedangkan operasi dari kelas TumozMovementController
hanya berisi fungsi akses (accessor method) dari vektor posisi, kanan, atas, arah ,
dan kecepatan kamera, serta fungsi virtual seperti inisialisasi, update, dan
kalkulasi ulang sumbu kamera. Untuk lebih jelasnya dapat dilihat pada gambar
3.25.
Gambar 3.25. Class TumozMovementController
STIKOM S
URABAYA
69
3.4.21. Class TumozMCEgo
Kelas TumozMCEgo merupakan kelas kontroler dengan sistem kamera
yang berpusat pada sudut pandang orang pertama (Egocentric Viewpoint).
Atribut-atributnya merupakan atribut tambahan yaitu m_fSpeed, dan m_fSlide.
Sedangkan operasinya terdiri dari mengambil nilai vektor rotasi, mengatur
kecepatan rotasi, mengatur kecepatan kamera, mengatur kecepatan pergeseran
kamera, mengatur rotasi, mengatur posisi kamera, mengatur arah kamera, update,
kalkulasi sumbu kamera, dan sebagainya. Untuk lebih jelasnya dapat dilihat pada
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
STIKOM S
URABAYA
70
nilai rotasi dan kalkulasi ulang vektor lokal, menambahkan kecepatan rotasi
disekitar sumbu, update dan sebagainya. Untuk lebih jelasnya dapat dilihat pada
gambar 3.27.
Gambar 3.27. Class TumozMCFree
3.4.23. Class TumozTimer
Kelas TumozTimer merupakan kelas tambahan yang berfungsi untuk
untuk menghitung informasi waktu seperti jam, menit, detik, waktu yang berlalu,
dan fps (frame rate per second) dari suatu proses rendering. Atribut dari kelas
TumozTimer antara lain jam, menit, detik, waktu saat ini, timestamp, dan
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. STIKOM S
URABAYA
71
Gambar 3.28. Class TumozTimer
3.5. Flowchart Diagram
Flowchart atau diagram alir merupakan sebuah diagram dengan simbol-
simbol grafis yang menyatakan aliran algoritma atau proses yang menampilkan
langkah-langkah yang disimbolkan dalam bentuk kotak, beserta urutannya dengan
menghubungkan masing-masing langkah tersebut menggunakan tanda panah.
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.
STIKOM S
URABAYA
72
3.5.1. Flowchart Operasi Create Device()
Operasi CreateDevice() merupakan operasi dari kelas TumozRenderer
yang berfungsi untuk membuat obyek render device (perangkat rendering)
berdasarkan pilihan kelas implementasi dari API yang disediakan.
Mulai
Api=API_DIRECT3D
Load Libyrary TumozD3.dll
Ya
Selesai
Load Library Gagal?
Tampil Pesan Error
Ya
Return E_FAIL
Tidak
Tidak
GetProcAddress Gagal?
Ya
Buat handle ke pointer Tumoz Render Device
Tidak
Pointer Tumoz Render Device
Gagal?
Ya
Return S_OK
GetProcAddress
Tidak
Gambar 3.29. Flowchart Operasi CreateDevice()
STIKOM S
URABAYA
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
dan keluar. Sebaliknya jika ya maka akan memulai proses Load Library
Tumoz3D.dll. Hasil dari proses Load Library tersebut akan di periksa jika gagal
maka akan muncul pesan error dan seterusnya seperti sebelumnya. Dan jika
berhasil akan berlanjut ke proses GetProcAddress.
Pada proses GetProcAddres akan menghubungkan semua fungsi-fungsi
interface TumozRenderDevice dengan kelas implementasi TumozD3D. Dan
setelah berhasil akan dibuatkan handle ke pointer kelas TumozRenderDevice
tersebut lalu mengembalikan nilai fungsi S_OK sebagai tanda proses berhasil dan
keluar. Dengan demikian maka render device siap untuk digunakan.
3.5.2. Flowchart Operasi Init()
Operasi Init() merupakan operasi dari kelas TumozD3D yang merupakan
turunan dari interface TumozRenderDevice. Operasi ini berfungsi untuk
melakukan inisialisasi pada dialog box dalam memilih device dan format yang
diinginkan, menentukan jumlah tampilan windows, dan beberapa pengaturan
(setting) lainnya sebelum rendering dimulai.
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.
STIKOM S
URABAYA
74
Mulai
Buat variabel dan atur savelog berdasarkan
Param
Cek jumlah windows > 0
Cek jumlah windows > batas
maksimum
Ya
Atur jumlah windows = batas
maks
Ya
Buat array windows
Tidak
Set windows tunggal
Tidak
Atur windows utama
Cek bit stencil minimum > 0
m_bStencil = true
Ya
Buat enumerasi berdasarkan depth buffer
dan stencil buffer
Tidak
Buat handle untuk meload gambar logo
Buat dan Tampilkan dialog setting device dan simpan dalam
nResult
Cek handle gambar logo ada?
Hapus handle gambar logo
Ya
Tidak
Cek nResult = -1
Return TUMOZ_FAIL
Ya
Cek nResult = 0
Tidak
Return TUMOZ_CANCELED
Ya
Cek nResult = -2
Tidak
Return TUMOZ_NOTCOMPATI
BLE
Ya
Tidak
Return Go()
Selesai
Tampil Log panggil dialog
Tampil log pemilihan
dialog selesai
Tampil log error:
pemiilihan dialog error
Tampil log warning: pilihan
dibatalkan user
Tampil log error:
adapter grafis tidak kompatible
Tampil log menjalanka
n MS Direct3D
Gambar 3.30. Flowchart Operasi Init()
STIKOM S
URABAYA
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
ini berfungsi untuk memulai jalannya proses API Direct3D berdasarkan pilihan
setting device, format dan sebagainya dari combo box pada operasi Init().
Proses awal dari operasi ini dimulai dari membuat obyek Direct3D9
(D3D) dan jika berhasil maka dilanjutkan ke proses perulangan untuk memeriksa
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
dan tampilan windows apakah akan memakai layar penuh (fullscreen) atau tidak.
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
windows yang diinginkan lebih dari satu dan tampilannya tidak memakai layar
penuh (fullscreen) maka perlu dibuatkan swapchain tambahan yang berfungsi
untuk menampilkan beberapa jendela tampilan secara simultan.
Tahapan akhir dari operasi ini adalah memeriksa apakah obyek
D3DDevice (pointer device) telah berhasil di buat dan tidak mengalami error. Jika
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.
STIKOM S
URABAYA
76
Mulai
Cek pointer D3D ada?
Release dan set NULL
Ya
Buat Direct3D9
Buat D3D gagal?
Tidak
True
i = 0
False
i < Jumlah combo device
Cek Apakah Combo Sesuai dgn adapter?
Ya
Simpan nilai combo dan break
Ya
Tidak
Set Present Parameter
Tampil log error: Direct3DCreate9
()
i++
Apakah jenis Stencil buffer dipilih?
m_bStencil = true
Ya
m_bStencil = falseTidak
Tampilan fullscreen?
Atur windows utama D3D beserta ukuran
Back Buffer dan hilangkan cursor
Ya
Set windows index 0 ke windows utama D3D
beserta ukuran Back buffer sesuai dengan windows
default
Tidak
Buat Device Direct3D
Cek jumlah windows > 0 & tidak fullscreen?
Buat SwapChain tambahan
Ya
Release pointer enumerasi dan
set NULL
Tidak
Cek Device Direct3D gagal?
Tampil log error:
IDirect3D::CreateDevice()
Ya
Tampil log inisialisasi siap dan online
Tidak
Buat LogDeviceCaps
Return TUMOZ_CREATEDEVI
CE
Set variabel global bahwa device sudah
berjalan
Return OneTimeInit();
Selesai
Gambar 3.31. Flowchart Operasi Go()
STIKOM S
URABAYA
77
3.5.4. Flowchart Operasi OneTimeInit()
Operasi OneTimeInit() juga merupakan salah satu fungsi bantuan dari
kelas TumozD3D. Operasi ini melakukan inisialisasi seperti mengatur
renderstate, material standar, texture filtering, viewport, dan hal-hal yang
dibutuhkan lainnya sebelum rendering dimulai. Operasi OneTimeInit() juga
merupakan paket atau kumpulan pengaturan (setting) standar untuk proses
rendering yang paling umum di pakai.
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
poligon solid. Proses selanjutnya adalah membuat membuat obyek skin manager
dan vertex cache manager dan juga mengaktifkan renderstate untuk lighting,
culling dan z buffer.
Untuk membantu sistem pencahayaan maka perlu dibuatkan pengaturan
material standar dan jika gagal maka akan keluar dari proses. Sebaliknya jika
berhasil maka proses selanjutnya adalah mengatur texture filtering, kemudian
pengaturan stage awal untuk proyeksi perspektif 3 dimensi, pengaturan matriks
identitas untuk tampilan tiga dimensi, dan pengaturan clipping planes untuk
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.
STIKOM S
URABAYA
78
Mulai
Cek apakah tidak ada SIMD
CPU?
Ya
Tidak
Set Mode Shading Solid
Buat Skin Manager dan
Vertex Manager
Aktifkan RenderState
untuk Lighting, Culling dan Z
buffer
Buat dan atur Material standar
Cek aktivasi Material
D3DDevice gagal?
Ya
Return TUMOZ_FAIL
Selesai
Set Texture Filtering
Pengaturan stage awal
untuk mode 3D atau
perspective
Set identity matrix untuk
View 3D
Set nilai Clipping Planes
Cek apakah Shader dapat digunakan?
Atur nilai default Shader
Ya
Cek apakah pembuatan
Vertex Shader dasar gagal
Inisialisasi dan pemeriksaan
Shader
Ya
Return TUMOZ_FAIL
Pengaturan level Ambient Light
Tidak
Tidak
Cek apakah inisialisasi Stage dgn Perspective
gagal?
Return TUMOZ_FAIL
Ya
Cek pengaturan
Mode Engine dgn
Perspective gagal?
Tidak
Return TUMOZ_FAIL
Ya
Set Transformasi
World
Tidak
Tampil log inisialisasi one time
scene selesai
Return TUMOZ_OK
Tampil log error: atur material
Tampil log Buat
Vshader gagal
Tampil log SIMD CPU
tidak terdeteksi
Tampil log SIMD
CPU terdeteksi
Gambar 3.32. Flowchart Operasi OneTimeInit()
STIKOM S
URABAYA
79
3.5.5. Flowchart Operasi UseWindow()
Operasi ini juga merupakan operasi turunan dari interface
TumozRenderDevice yang terdapat pada kelas implementasi TumozD3D. Operasi
ini berfungsi untuk menentukan jendela tampilan utama yang akan dijadikan
target proses rendering baik pada jendela tampilan tunggal atau pada beberapa
jendela tampilan. Untuk lebih jelasnya flowchart dari operasi tersebut dapat
dilihat pada gambar 3.33.
Mulai
Buat Obyek Backbuffer dari
LPDIRECT3DSURFACE9 dan set NULL
Cek dari Present Parameter apakah
bukan mode windows?
Return TUMOZ_OK
Ya
nHwnd >= m_nNumhW
ndTidak
Return TUMOZ_INVALIDID
Ya
Selesai
Cek panggil m_pChain[nHwnd]->GetBackBuffer()
gagal?
Tidak
Tampil log error: GetBackBuffer()
gagal di UseWindow
Ya
Return TUMOZ_FAIL
Set Target Render
D3DDevice ke Backbuffer
Tidak
Pointer BackBuffer di
Release
m_nActivehWnd = nHwnd
Return TUMOZ_OK
Gambar 3.33. Flowchart Operasi UseWindow()
STIKOM S
URABAYA
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
of view (FOV) yang diberikan pada viewport stage yang dituju. Operasi ini
merupakan bagian dari kelas TumozD3D yang juga merupakan operasi turunan
dari interface TumozRenderDevice. Detil dari proses flowchart operasi ini
digambarkan pada gambar 3.34.
Mulai
Cek pointer Viewport ada?
Copy pView ke dalam
m_VP[nStage]
Ya
Buat Viewport baru dari m_dwWidth dan
m_dwHeight lalu copy ke dalam
m_VP[nStage]
Tidak
nStage>3 || nStage<0
nStage=0
Ya
Hitung Aspect Ratio Stage
Tidak
Cek apakah
perhitungan Matriks Proyeksi
Perspektif gagal?
Return TUMOZ_FAIL
YaHitung Matriks
Proyeksi Orthogonal
Selesai
Tidak
Gambar 3.34. Flowchart Operasi InitStage()
STIKOM S
URABAYA
81
3.5.7. Flowchart Operasi CreateVShader()
Operasi CreateVShader() merupakan operasi penting bagi kelas
TumozD3D yang berfungsi untuk membuat obyek verteks shader untuk device
Direct3D. Shader tersebut dapat mengkalkulasi efek rendering pada perangkat
keras grafis dengan tingkat fleksibilitas yang sangat tinggi. Operasi ini juga
merupakan operasi turunan dari interface TumozRenderDevice.
Pengecekan batas maksimum dari obyek verteks shader dilakukan pada
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
dalam pointer agar dapat di proses. Sebaliknya jika belum maka perlu memanggil
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
fungsi GetBufferPointer().
Langkah selanjutnya dari proses flowchart ini adalah membuat obyek
verteks shader menggunakan fungsi dari pointer device yaitu
CreateVertexShader() berdasarkan pointer yang berisi data hasil kompilasi yang
telah di buat sebelumnya. Setelah obyek verteks shader berhasil di buat lalu
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. STIKOM S
URABAYA
82
Mulai
Buat variabel pointer D3DBuffer, DWORD, HRESULT
dan HANDLE
Cek apakah jumlah Vertex Shader melebihi batas
maksimum?
Tampil log error: sudah
mencapai jumlah maks
Ya
Return TUMOZ_OUTOFMEM
ORY
Selesai
Cek dari parameter apakah sudah
dicompile?
Tidak
Diambil dari File?
Ya
Panggil CreateFile() dengan data dari
parameter sebagai argumen dan simpan hasilnya pada hFile
Ya
hFile == INVALID_HANDLE
_VALUE
Tampil log error:
CreateFile() gagal
Ya
Return TUMOZ_FILENOT
FOUND
Buat FileMapping dan ambil datanya
dan simpan ke dalam pointer DWORD pVS
Tidak
Simpan langsung data dari
parameter kedalam pointer
DWORD pVS
Tidak
Diambil dari File?
Tidak
Panggil D3DXAssembleShaderFrom
File dengan data dari parameter dan simpan hasil
HRESULT hrA
Ya
Panggil D3DXAssembleShader
dengan data dari parameter dan simpan
hasil HRESULT hrA
Tidak
Cek apakah hrA berhasil?
Simpan data pointer ke pVS menggunakan
GetBufferPointer()
Ya
Tampil log error
Tidak
Return TUMOZ_FAIL
Simpan ID kedalam variabel global Vertex Shader
Bebaskan resource handle
Increment jumlah Vertex Shader
yang ada
Return TUMOZ_OK
Cek apakah pembuatan
CreateVertexShader dgn pVS
gagal?
Ya Tidak
Gambar 3.35. Flowchart Operasi CreateVShader()
STIKOM S
URABAYA
83
3.5.8. Flowchart Operasi AddSkin()
Operasi AddSkin() merupakan salah satu operasi terpenting pada kelas
TumozD3DSkinManager yang juga merupakan operasi turunan dari interface
TumozSkinManager. Tugas dari operasi ini adalah untuk membuat obyek skin
baru berdasarkan material yang diberikan pada parameter dari fungsi tersebut.
Sedangkan untuk tekturnya akan dikosongkan terlebih dahulu.
Operasi ini diawali dengan mengalokasikan slot memory pada pointer
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.
Proses berikutnya dilanjutkan dengan pembuatan material berdasarkan
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
ke pointer material baru lalu idnya di simpan ke dalam obyek skin.
Tahapan selanjutnya dari operasi ini adalah pengaturan nilai alpha dari
skin menjadi false. Tekstur pada operasi ini dikosongkan terlebih dahulu dengan
cara mengatur masing-masing id dari tekstur pada skin dengan nilai MAX_ID.
Lalu dilanjutkan dengan menyimpan id skin dan menambah jumlah obyek skin
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.
STIKOM S
URABAYA
84
Mulai
Jumlah Skin mod 50
== 0?
Alokasikan 50 slot memory Skin baru ke pointer Skin
global
Ya
Cek apakah nilai pointer Skin global tidak
valid?
Return TUMOZ_OUTOFME
MORY
Ya
Selesai
Buat Material berdasarkan
nilai dari parameter
Tidak
Tidak
nMat=0
nMat<Jumlah Material?
Cek material baru
dng yg sudah ada pd indeks [nMat]
menggunakan MaterialEqual()
Ya
bMat = true;Break;
Ya
nMat++
Tidak
bMat == true?
Tidak
Ubah ID Material Skin baru dengan
nMat
Ya
Ubah ID Skin baru dengan
jumlah Material
TidakJumlah
Material mod 50 == 0?
Alokasikan 50 slot memory Material baru ke pointer Material global
Ya
Cek apakah nilai
pointer Material global tidak
valid?
Ya
Copy Material baru ke dalam pointer material global indeks terakhir
Tidak
Increment jumlah Material
yang ada
Set penggunaan nilai alpha pada
Skin baru menjadi false
Int i = 0
i < 8?
Set ID Texture pada indeks [i]
Skin baru menjadi MAX_ID
Ya
i++
Set nilai reference
parameter ID Skin ke jumlah
Skin
Tidak
Increment jumlah Skin
yang ada
Return TUMOZ_OK
Buat variabel UINT nMat dan bool bMat=false
Tidak
Gambar 3.36. Flowchart Operasi AddSkin()
STIKOM S
URABAYA
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
akan dilakukan secara terpisah yaitu menggunakan operasi AddTexture(). Operasi
AddTexture() juga merupakan operasi pada kelas TumozD3DSkinManager dan
merupakan operasi turunan dari interface TumozSkinManager yang berfungsi
untuk menambahkan obyek tekstur baru ke dalam obyek skin.
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
penuh. Setelah itu dilanjutkan lagi dengan pemeriksaan apakah file tekstur ini
sudah ada sebelumnya.
Jika file tekstur tersebut belum ada maka perlu dilakukan alokasi
memory untuk pointer obyek tekstur baru. Lalu simpan atribut-atribut yang
penting pada obyek tekstur baru seperti status alpha, dan nama tekstur. Operasi
dilanjutkan lagi dengan memuat data dari file tekstur ke dalam buffer grafis pada
obyek device menggunakan fungsi bantuan CreateTexture() berdasarkan data file
tekstur dan nilai alpha dari parameter.
Apabila obyek tekstur menggunakan transparansi atau nilai status alpha
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.
STIKOM S
URABAYA
86
Mulai
Cek ID Skin dari
parameter >= Jumlah Skin?
Return TUMOZ_INVALID
ID
Ya
Cek ID Texture terakhir
dari Skin global pada indeks ID dari param
sudah ada?
Tidakerror: semua texture stage
telah diset
Ya
Return TUMOZ_BUFFER
SIZE
Selesai
Buat variabel UINT nTex, bool bTex=false dan pointer
TUMOZTEXTURE pTumozTex
nTex = 0Tidak
nTex < Jumlah Texture
Cek nama pada Texture
global indeks nTex sama dgn nama dr
param?
Ya
bTex = true;break;
Ya
nTex++
Tidak
bTex == false?
Tidak
Jumlah Texture mod
50 == 0?
Ya
Alokasikan 50 slot memory
Texture baru ke pointer Texture
global
Ya
Cek apakah nilai pointer
Texture global tidak valid?
Ya
error: AddTexture()
gagal, realloc()
Return TUMOZ_OUTOF
MEMORY
Cek bAlpha dari parameter sama dgn
true?
Tidak
Set nilai Alpha dari Skin global pada index ID Skin dari parameter
menjadi true
Ya
Set nilai fAlpha pada Texture global indeks
baru menjadi 1.0f
Set nilai pointer ClrKeys pada Texture global indeks baru menjadi
NULL
Simpan nama Texture dari parameter ke dalam
nama Texture global indeks baru
Panggil CreateTexture() dgn
Texture global indeks baru dan bAlpha
sebagai parameter dan simpan HResultnya
Cek apakah HResult CreateTexture
gagal?
error: CreateTexture()
gagal
Ya
Return HResult
Cek bAlpha?
Tidak
Simpan pointer Texture global
indeks baru kedalam pTumozTex
Ya
Simpan atribut Color Keys dari parameter ke
dalam TumozTex
Simpan pointer isi data pTumozTex ke dalam
LPDIRECT3DTEXTURE9 pTex
Tidak
Tidak
Tidak
C
A
B
Tidak
Gambar 3.37. Flowchart Operasi AddTexture()
STIKOM S
URABAYA
87
DWORD dw=0
dw < Jumlah Color Keys dari
parameter
Panggil SetAlphaKeys() dgn pTex dan ColorKeys
sebagai param dan simpan HResultnya
Ya
Cek apakah Hresult SetAlphaKeys
gagal?
error: SetAlphaKeys
gagal
Ya
dw++
Tidak
Return HResult
Cek nilai
Alpha dari param <
1.0f?
Tidak
Simpan nilai alpha dari parameter ke dalam pTumozTex
Ya
Panggil SetTransparency() dgn pTex dan nilai alpha
sebagai param dan simpan HResultnya
Cek apakah Hresult
SetTransparency gagal?
error: SetTransparency
gagal
Ya
Return HResult
nTex = Jumlah Texture yang
ada
Tidak
Increment jumlah Texture
yang ada
Int i = 0
i < 8
Cek apakah ID texture pada Skin global indeks ke [i] ==
MAX_ID
Ya
Set ID Texture pada Skin global indeks ke [i] = nTex
dan break
Ya
Return TUMOZ_OK
i++
Tidak
C
B
Selesai
Tidak
A
Gambar 3.38. Lanjutan Flowchart Operasi AddTexture().
STIKOM S
URABAYA
88
3.5.10. Flowchart Operasi CreateStaticBuffer()
Operasi CreateStaticBuffer() merupakan operasi dari kelas
TumozD3DVCManager yang juga merupakan operasi turunan dari interface
TumozVertexCacheManager. Tugas dari operasi ini adalah untuk membuat buffer
verteks dan indeks statis berdasarkan data dari parameter agar dapat digunakan
nanti pada saat proses rendering.
Awal proses dari operasi ini dimulai dari mengalokasikan memory untuk
pointer obyek buffer statis baru dan menyimpan atribut-atribut dari paramter
seperti jumlah verteks dan indeks serta id skin yang berhubungan dengan buffer
tersebut.
Sebelum memasukkan data verteks maka perlu di periksa terlebih dahulu
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
buat menggunakan fungsi CreateIndexBuffer() dari device. Untuk mengisi data
dari parameter ke dalam buffer indeks maka dilakukan dengan cara metode
penguncian menggunakan fungsi Lock() dan Unlock() dari fungsi obyek indeks
buffer tersebut.
Untuk membuat buffer verteks (LPDIRECT3DVERTEXBUFFER9) juga
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.
STIKOM S
URABAYA
89
Mulai
Cek apakah Jumlah Static
Buffer >= (MAX_ID-1)
Return TUMOZ_OUTOFMEMORY
Ya
Selesai
Jumlah Static Buffer
mod 50 == 0?
Tidak Alokasikan 50 slot memory Static Buffer baru ke pointer Static Buffer global
Ya
Cek apakah nilai pointer Static
Buffer global tidak valid?
Ya
Simpan Jml Vertex & Index jg ID Skin dari param ke dlm Static Buffer global indeks
baru
Tidak
Tidak
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?
Return TUMOZ_INVALIDID
Ya
Tidak
Jumlah Indices > 0
Set atribut bIndis = true dan jml triangle = indis/3 pada Static buffer global
indeks baru
Ya
Panggil CreateIndexBuffer() dgn atribut data IB pada
Static Bufffer global indeks baru sbg parameter dan
simpan HResultnya
Cek apakah HResult
CreateIndexBuffer() gagal?
Return TUMOZ_CREATEBUFFER
Ya
Cek apakah pemanggilan Lock() pada data IB Static Buffer indeks baru
dgn pData sbg param berhasil?
Tidak
Copy data indis dari param ke dlm pointer pData yg telah dikunci
Ya
Return TUMOZ_BUFFER
LOCK
Tidak
Set atribut bIndis = false, jml triangle = verts/3 dan
data IB = NULL pada Static buffer global indeks baru
Tidak
Cek apakah D3D
menggunakan Shader?
Buat variabel pendukung seperti
DWORD dwActualFVF dan pointer VOID
pData
dwActualFVF = 0
Ya
Simpan FVF Static Buffer global indeks
baru ke dwActualFVF
Tidak
Panggil CreateVertexBuffer() dgn dwActualFVF dan atribut data VB pada Static Bufffer global indeks baru sbg parameter dan simpan
HResultnya
Cek apakah HResult
CreateVertexBuffer() gagal?
Ya
Cek apakah pemanggilan
Lock() pada data VB Static Buffer indeks baru dgn pData sbg param
berhasil?
Tidak
Copy data verts dari param ke dlm pointer pData yg telah dikunci
Ya
Panggil method Unlock() pada data IB Static Buffer indeks baru
Panggil method Unlock() pada data
VB Static Buffer indeks baru
Tidak
Masukkan jumlah Static buffer ke dalam pointer
pnID dari parameter sebagai ID baru
Increment jumlah Static
Buffer yang ada
Return TUMOZ_OK
Gambar 3.39. Flowchart Operasi CreateStaticBuffer()
STIKOM S
URABAYA
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.
Operasi CreateFont() merupakan operasi bagian dari kelas TumozD3D dan
turunan dari operasi interface TumozRenderDevice.
Untuk membuat obyek font harus ditentukan terlebih dahulu deskripsi
dari font tersebut seperti tinggi, lebar, style dan sebagainya menggunakan struct
D3DXFONT_DESC. Obyek tersebut kemudian di buat menggunakan fungsi
D3DXCreateFontIndirect() dari API Direct3D. Untuk lebih jelasnya flowchart
dari operasi ini dapat dilihat pada gambar 3.40.
Mulai
Cek apakah
pointer ID font dari param
valid?
Set masing-masing atribut D3DX Font Description berdasarkan parameter
seperti tinggi, lebar, style font dll
Tidak
Return TUMOZ_INVALIDPARAM
Ya
Selesai
Alokasikan tempat baru utk pointer global
LPD3DXFont menggunakan Realloc()
Panggil D3DXCreateFontIndirect() dgn pointer D3D Device,
Font Desc dan pointer Font global indeks baru sbg
param dan simpan Hresult
Cek apakah HResult
D3DXCreateFontIndirect() berhasil?
Simpan Jumlah Font ke dalam pointer ID Font dari param sbg ID baru
Ya
Increment jumlah Font yang ada
Return TUMOZ_OK
Return TUMOZ_FAIL
Tidak
Gambar 3.40. Flowchart Operasi CreateFont()
STIKOM S
URABAYA
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
mempersiapkan device untuk menerima proses rendering geometri.
Awalnya buffer pixel, stencil dan depth dibersihkan menggunakan
fungsi Clear() dari device dan setelah itu memanggil fungsi device BeginScene()
yang menandakan device siap untuk melakukan proses rendering. Untuk lebih
jelasnya flowchart dari operasi ini dapat dilihat pada gambar 3.41.
Mulai
Cek parameter
bClearPixel II bClearDepth II bClearStencil
DWORD dw=0
Apakah bClearPixel
== true?
Ya
dw |= D3DCLEAR_TARGET
Ya
Tidak
Apakah bClearDepth
== true?
dw |= D3DCLEAR_ZBUFFER
Ya
Apakah bClearStencil & Stencil global ==
true?
Tidak
dw |= D3DCLEAR_STENCIL
Ya
Cek apakah
pemanggilan Clear() pada pointer D3D
dengan dw dan ClearColor global
sbg param gagal?
Tidak
Tampil log error:Clear()
Ya
Return TUMOZ_FAIL
Selesai
Cek apakah
pemanggilan BeginScene() pada
pointer D3D gagal?
Tidak
Ya
Set status Scene sedang berjalan
menjadi true pada variabel global
Tidak
Return TUMOZ_OK
Tidak
Gambar 3.41. Flowchart Operasi BeginRendering()
STIKOM S
URABAYA
92
3.5.13. Flowchart Operasi EndRendering()
Operasi EndRendering() merupakan pasangan dari operasi
BeginRendering() pada kelas TumozD3D yang bertugas untuk mengakhiri proses
rendering dan menampilkan scene ke front buffer.
Prosesnya sangat sederhana dimulai dari mengirim semua data buffer
verteks untuk ditampilkan menggunakan fungsi ForcedFlushAll() dari obyek
pointer TumozVertexCacheManager. Lalu proses rendering diakhiri dengan
memanggil fungsi device yaitu EndScene().
Dan terakhir hasil rendering ditampilkan ke layar (front buffer)
menggunakan fungsi Present() baik dari device untuk jendela tampilan tunggal
atau dari obyek swapchain untuk jendela tampilan yang aktif dari beberapa
windows. Detil dari proses flowchart operasi ini digambarkan pada gambar 3.42.
Mulai
Cek pemanggilan
ForcedFlushAll() pointer Vertex manager global
gagal?
error: ForceFlushAll() gagal
Ya
Panggil EndScene() dari pointer D3D
Device
Tidak
Cek attrib windowed dari D3D Present parameter true &
Jml windows > 0?
Cek pemanggilan Present() dari
pointer SwapChain global pada indeks
windows aktif gagal?
Ya
error: Present() gagal
Ya
Cek pemanggilan Present() dari pointer D3D Device global
gagal?
Tidak
Ya
Set status Scene sedang berjalan menjadi false pada variabel global
Tidak
Selesai
Tidak
Gambar 3.42. Flowchart Operasi EndRendering()
STIKOM S
URABAYA
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
TumozD3D yang juga merupakan operasi turunan dari kelas
TumozRenderDevice.
Prosesnya dimulai dengan mengosongkan semua isi verteks buffer dan
memvalidasi ulang status kondisi dari obyek TumozVertexCacheManager
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
proses flowchart operasi ini digambarkan pada gambar 3.43.
Mulai
Cek status dr variabel global
apakah Shader tidak dapat digunakan?
Selesai
Ya
Cek status variabel global apakah Shader
dapat digunakan sama dengan parameter?
Tidak
Ya
Panggil ForcedFlushAll() dari pointer Vertex
Manager
Tidak
Panggil InvalidateStates() dari
pointer Vertex Manager
Set variabel global status penggunaan Shader berdasarkan variabel
Cek apakah variabel global
status penggunaan shader adalah
false?
Panggil SetVertexShader() dari pointer D3D Device dg
parameter NULL
Ya
Panggil SetPixelShader() dari pointer D3D Device
dg parameter NULL
Panggil SetVertexDeclaration() dari
pointer D3D Device dg parameter NULL
Panggil SetFVF() dari pointer D3D Device
dg parameter 0
Tidak
Gambar 3.43. Flowchart Operasi UseShaders()
STIKOM S
URABAYA
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
obyek font GDI yang telah dijelaskan sebelumnya dalam proses rendering.
Operasi dari kelas TumozD3D ini biasanya dipanggil di antara fungsi
BeginRendering() dan EndRendering(). Untuk lebih jelasnya flowchart dari
operasi ini dapat dilihat pada gambar 3.44.
Mulai
Deklarasi variabel lokal seperti RECT dengan ukuran sesuai dgn param dan pointer char untuk
menyimpan teks
Simpan atau tempatkan teks dari
param ke dalam pointer char lokal
Cek apakah ID
Font lebih besar/sama dgn jumlah
font yang ada?
Return TUMOZ_INVALIDPARAM
Ya
Selesai
Panggil DrawText dari pointer D3DXFont global
dgn teks, RECT dan warna Font sbg param
Tidak
Return TUMOZ_OK
Gambar 3.44. Flowchart Operasi DrawText()
3.5.16. Flowchart Operasi SetAmbientLight()
Pencahayaan ambient merupakan salah satu teknik sistem pencahayaan
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
STIKOM S
URABAYA
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.
Mulai
Panggil ForcedFlushAll() dari
pointer Vertex Manager global
Hitung nilai warna dari parameter
dengan range 255
Cek variabel global apakah
dapat melakukan Shader?
Panggil SetVertexShaderConstantF()
dari pointer D3D Device untuk mengatur warna default
diffuse pd Shader
Ya
Panggil SetRenderState() dari pointer D3D Device untuk
Ambient Light dengan warna hasil perhitungan sebagai parameter
Tidak
Selesai
Gambar 3.45. Flowchart Operasi SetAmbientLight()
3.5.17. Flowchart Operasi SetWorldTransform()
Operasi SetWorldTransform() merupakan operasi dari kelas TumozD3D
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.
STIKOM S
URABAYA
96
Mulai
Panggil ForcedFlushAll() dari
pointer Vertex Manager global
Cek apakah matriks World
dari param kosong?
Buat matriks identitas lalu copy ke dalam matriks
World global
Ya
Copy matriks dari parameter simpan ke dalam matriks
World global
Tidak
Panggil CalcWorldViewProjMatrix()
Cek variabel global apakah
dapat melakukan Shader?
Panggil SetVertexShaderConstantF() dari pointer D3D Device dan
Transpose matriks WorldViewProj global sbg
param
Ya
Panggil SetTransform() dari pointer D3D Device
dan matriks World global sebagai param
Tidak
Selesai
Gambar 3.46. Flowchart Operasi SetWorldTransform()
3.5.18. Flowchart Operasi ActivateVShader()
Operasi ini bertugas untuk mengaktifkan obyek verteks shader yang di
buat sebelumnya pada obyek device. Operasi ActivateVShader() merupakan
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
STIKOM S
URABAYA
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
obyek verteks shader yang diinginkan. Untuk lebih jelasnya flowchart dari operasi
ini dapat dilihat pada gambar 3.47.
Mulai
Cek variabel global apakah
Shader dapat tidak dapat
digunakan?
Return TUMOZ_NOSHADER
SUPPORT
Ya
Selesai
Cek apakah ID
Vertex Shader >= jumlah Vertex Shader yang
ada?
Tidak
Return TUMOZ_INVALIDID
Ya
Panggil ForcedFlushAll() dari
pointer Vertex Manager global
Tidak
Cek apakah Vertex ID dari param valid?
Tidak
Cek apakah pemanggilan
SetVertexDeclaration() dari pointer D3D
Device gagal?
Ya
Return TUMOZ_FAIL
Ya
Cek pemanggilan
SetVertexShader() dari pointer D3D
Device dgn pointer Vertex Shader indeks
ID dr param gagal?
Tidak
Ya
Set variabel Vertex Shader aktif global == ID
dari param
Tidak
Set satus variabel sedang digunakan
global == true
Return TUMOZ_OK
Gambar 3.47. Flowchart Operasi ActivateVShader()
STIKOM S
URABAYA
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
berserta skin yang berhubungan dengan buffer tersebut. Operasi Render() adalah
operasi dari kelas TumozD3DVCManager yang juga merupakan operasi turunan
dari interface TumozVertexCacheManager.
Pertama-tama operasi ini dimulai dengan memanggil fungsi
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
indeks dengan menggunakan fungsi SetIndices() dari obyek device.
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
menggunakan fungsi SetTexture(), dan mengatur kondisi alpha untuk efek
transparansi menggunakan fungsi SetRenderState() dari obyek device.
Tahapan berikutnya dilanjutkan dengan mengatur FVF menggunakan
fungsi SetFVF() dari obyek device apabila shader tidak digunakan. Setelah itu
melakukan pengaturan additive blending dan buffer warna (color buffer) untuk
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
STIKOM S
URABAYA
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
Panggil GetShadeMode() dari pointer global
TumozD3D dan simpan dalam
TUMOZRENDERSTATE sm
Cek ID dari param >=
jumlah Static buffer yang
ada?
error: ID Buffer Statis Tidak Valid
Ya
Return TUMOZ_INVALID
PARAM
Set variabel ActiveCache global ke
MAX_ID
Cek variabel global ActiveSB != ID dari param?
Tidak
Cekpointer Static
Buffer pada indeks ID dari param
menggunakan Index buffer?
Ya
Panggil SetIndices() dari pointer D3D Device dengan data IB sbg parameter dari pointer Static Buffer global
berdasarkan ID param
Ya
Panggil SetStreamSource() dari pointer D3D Device
dengan data Vertex Buffer sbg parameter dari pointer Static Buffer berdasarkan
ID param
Set variabel ActiveSB global mengarah pada
ID dari parameter
Tidak
Cek variabel global
ActiveIB != MAX_ID?
Tidak
Cek pointer Static
Buffer pada indeks ID dari param menggunakan Index buffer?
Panggil SetIndices() dari pointer D3D
Device dengan data IB sbg parameter dari
pointer Static Buffer global berdasarkan ID
param
Ya
Ya
Set variabel global ActiveIB =
MAX_ID
Tidak
Cek pemanggilan
GetActiveSkinID() dari pointer
TumozD3D != atribut SkinID dari
pointer Static Buffer bdsrkan
ID param?
Tidak
Buat pointer lokal TUMOZSKIN pSkin
berisi data Skin dari Skin Manager dengan
indeks dari ID Skin Static Buffer
Ya
sm == RS_SHADE_
SOLID
Buat pointer lokal TUMOZMATERIAL pMat
berisi data Material dari Skin Manager dengan indeks dari
pSkin->nMaterial
YaCek
TumozD3D tidak
menggunakan Shader?
Buat D3DMATERIAL9 mat yang berisi warna RGBA masing-masing
material Diffuse, Ambient, Specular, Emissive dan Specular
Power dari pMat
Ya
Panggil SetMaterial() dari pointer D3D Device
dengan mat sbg parameter
Panggil SetShaderConstant() dari TumozD3D untuk
warna material Ambient, Diffuse, Specular dan
Emissive berasal dari pMat
Tidak
Cek TumozD3D
menggunakan Texture?
Panggil SetTexture() dari D3D Device
dengan indeks 0 dan NULL sbg parameter
Tidak
Panggil GetWireColor() dari pointer TumozD3D dan simpan
hasillnya ke TUMOZCOLOR clrWire sbg warna Wireframe
Tidak
Buat D3DMATERIAL9 matW yang berisi warna RGBA masing-masing
material Diffuse, dan Ambient dari clrWire
Panggil SetMaterial() dari pointer D3D Device
dengan matW sbg parameter
A
Tidak
B
Ya
C
Selesai
Gambar 3.48. Flowchart Operasi Render()
STIKOM S
URABAYA
100
iT = 0Ya
iT < 8
pSkin->nTexture[iT] != MAX_ID
Ya
Panggil SetTexture() dari D3D Device dgn indeks iT dan data texture dari Skin Manager sbg
parameter
Ya
Panggil SetTextureStageState() dari D3D Device dgn indeks iT
dan Beberapa Perintah Operasi Texture sbg parameter
breakTidak
iT++
Panggil SetTextureStageState() dari
D3D Device dgn indeks iT dan Perintah Disable Operasi Texture sbg parameter
Tidak
Panggil SetTextureStageState() dari D3D Device dgn indeks 1 dan Perintah Disable Operasi
Texture sbg parameter
pSkin->bAlpha
Panggil SetRenderState() dari D3D Device dan beberapa
perintah untuk mengaktifkan Alpha Blending
Ya
Panggil SetRenderState() dari D3D Device dan
beberapa perintah untuk menonaktifkan Alpha
Blending
Tidak
Panggil SetActiveSkinID() dari TumozD3D dengan attribut
SkinID dari pointer Static Buffer indeks ID dari parameter
Cek pemanggilan
UsesShaders() dari pointer TumozD3D
apakah tidak menggunakan
Shader?
Panggil SetFVF() dari D3D Device dengan data FVF dari
Static Buffer indeks ID sbg parameter
Ya
Tidak
Cek attribut bIndis
dari pointer Static Buffer
true?
Tidak
sm == RS_SHADE_
POINTS
Ya
Panggil DrawPrimitive() dari D3D Device dgn
D3DPT_POINTLIST dan Jumlah Verts dari
pointer Static buffer sbg param dan simpan
hasilnya ke hr
Ya
sm == RS_SHADE_
LINESTidak
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
Ya
sm == RS_SHADE_HULLWIRE
Tidak
Panggil DrawIndexedPrimitive()
dari D3D Device dgn D3DPT_LINESTRIP dan Jml Verts dari pointer Static
buffer sbg param dan simpan hasilnya ke hr
Ya
Panggil DrawIndexedPrimitive()
dari D3D Device dgn D3DPT_TRIANGLELIST,
Jml Verts dan Jml Tris dari pointer Static buffer sbg
param dan simpan hasilnya ke hr
Tidak
Tidak
A
B C
Return hr
Selesai
D
Gambar 3.49. Lanjutan Flowchart Operasi Render()
STIKOM S
URABAYA
101
Return hr
Selesai
sm == RS_SHADE_
POINTS
Panggil DrawPrimitive() dari D3D Device dgn
D3DPT_POINTLIST dan Jumlah Verts dari
pointer Static buffer sbg param dan simpan
hasilnya ke hr
Ya
sm == RS_SHADE_
LINES
sm == RS_SHADE_HULLWIRE
TidakTidak
Panggil DrawPrimitive() dari D3D Device dgn D3DPT_LINELIST dan Jumlah Verts/2 dari
pointer Static buffer sbg param dan simpan
hasilnya ke hr
Ya
Panggil DrawPrimitive() dari D3D Device dgn
D3DPT_LINESTRIP dan Jumlah Verts dari
pointer Static buffer sbg param dan simpan
hasilnya ke hr
Ya
Panggil DrawPrimitive() dari D3D Device dgn
D3DPT_TRIANGLELIST dan Jumlah Tris dari pointer
Static buffer sbg param dan simpan hasilnya ke hr
Tidak
Tidak D
Gambar 3.50. Lanjutan Flowchart Operasi Render()
3.6. Component Diagram
Komponen perangkat lunak merupakan modul fisik dari sebuah sistem
atau kode. Diagram komponen menggambarkan bagaimana komponen
dihubungkan bersama untuk membentuk komponen yang lebih besar dan atau
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.
STIKOM S
URABAYA
102
Gambar 3.51. Component Diagram Tumoz Rendering Engine
Selain itu sistem ini juga membutuhkan komponen atau sistem dari luar
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
TumozD3D.
Sedangkan komponen MFC 6.0 merupakan komponen untuk
menyediakan sistem pengembangan yang berhubungan dengan API windows dan
hal-hal penting lainnya. Komponen tersebut memiliki relasi dan dibutuhkan oleh
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.
TumozRenderer TumozD3D Tumoz3D
TumozGeneral
MFC 6.0
DirectX 9.0
STIKOM S
URABAYA
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
dan .h adalah komponen yang berbeda seperti yang digambarkan pada gambar
3.52.
Gambar 3.52. merupakan ilustrasi diagram komponen dari paket atau
subsistem TumozRenderer. Komponen dari paket atau subsistem TumozRenderer
terdiri dari TumozRenderDevice.h, TumozRenderer.h, TumozRenderer.cpp, dan
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.
TumozRenderDevice.h TumozRenderer.h
TumozRenderer.libTumozRenderer.cpp
STIKOM S
URABAYA
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
file TumozRenderer.cpp merupakan package body atau kode sumbernya (source
code). Dan hasil kompilasi dari file-file tersebut akan menjadi static libary
TumozRenderer.lib yang akan digunakan sebagai file linker bagi pengguna
framework.
3.6.2. Component Diagram TumozD3D
Diagram komponen pada paket atau subsistem TumozD3D merupakan
diagram yang menggambarkan relasi komponen-komponen implementasi dari
interface paket atau subsistem TumozRenderer berdasarkan API Direct3D pada
framework engine.
Seperti yang terlihat pada gambar 3.53. bahwa komponen package
spesification atau file header dari paket atau subsistem TumozD3D terdiri dari
Tumoz.h, TumozD3D.h, TumozD3DVCache.h, TumozD3DSkinManager.h, dan
resource.h. Sedangkan komponen untuk package body atau file kode sumbernya
terdiri dari TumozD3DInit.cpp, TumozD3DMain.cpp, TumozD3DEnum.cpp,
TumozD3DMisc.cpp, TumozD3DVCache.cpp, dan TumozD3DSkinManager.cpp.
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.
STIKOM S
URABAYA
105
Gambar 3.53. Component Diagram TumozD3D
3.6.3. Component Diagram Tumoz3D
Diagram komponen pada paket atau subsistem Tumoz3D merupakan
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
TumozD3D.h
TumozD3DSkinManager.hTumozD3DVCache.h
TumozD3D.dll
Tumoz.h
TumozD3DEnum.cpp
TumozD3DInit.cppTumozD3DMain.cpp
TumozD3DMisc.cpp
TumozD3DSkinManager.cpp
TumozD3DVCache.cpp
resource.h
STIKOM S
URABAYA
106
ada di dalam paket atau subsistem Tumoz3D dan juga menjadi acuan bagi semua
komponen kode sumber dari subsistem tersebut.
Gambar 3.54. Component Diagram Tumoz3D
Sedangkan untuk komponen package body atau file kode sumber dari
paket atau subsistem Tumoz3D terdiri dari TumozCPU.cpp, TumozVector.cpp,
TumozMatrix.cpp, TumozRay.cpp, TumozPlane.cpp, TumozPolygon.cpp,
TumozPolylist.cpp, TumozAABB.cpp, TumozOBB.cpp, TumozQuat.cpp,
TumozOctree.cpp, dan TumozBSPTree.cpp.
Tumoz3D.lib
Tumoz3D.h
TumozAABB.cpp
TumozBSPTree.cppTumozCPU.cpp
TumozMatrix.cpp
TumozOBB.cppTumozOctree.cpp TumozPlane.cpp
TumozPolygon.cpp
TumozPolylist.cpp
TumozQuat.cppTumozRay.cpp TumozVector.cpp
STIKOM S
URABAYA
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
mengaktifkan CPU matematika cepat SIMD. Hasil kompilasi dari seluruh
komponen dari paket atau subsitem Tumoz3D tersebut menjadi static library
Tumoz3D.lib.
3.6.4. Component Diagram TumozGeneral
Gambar 3.55. mengilustrasikan bentuk relasi dari diagram komponen
TumozGeneral yang merupakan paket atau subsistem yang berisi komponen-
komponen untuk kendali pergerakan, kamera dan informasi-informasi yang
dibutuhkan lainnya dalam proses rendering.
Komponen-komponen package spesification atau file header dari paket
atau subsistem TumozGeneral tersebut terdiri dari TumozGeneral.h,
TumozMovementController.h, TumozMCEgo.h, TumozMCFree.h, dan
TumozTimer.h.
Perlu diketahui bahwa file header TumozGeneral.h hanya berisi referensi
(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
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
STIKOM S
URABAYA
108
TumozTimer.cpp. Dan sedangkan hasil kompilasinya berupa static library
TumozGeneral.lib.
Gambar 3.55. Component Diagram TumozGeneral
TumozGeneral.lib
TumozGeneral.hTumozMCEgo.h TumozMCFree.h
TumozMovementController.h TumozTimer.h
TumozMCEgo.cpp
TumozMCFree.cpp TumozMovementController.cpp
TumozTimer.cpp
STIKOM S
URABAYA