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 SURABAYA
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
Selesai Tidak
Gambar 3.3 Flowchart Pembuatan Algoritma BSP Tree
STIKOM SURABAYA
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 SURABAYA
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 SURABAYA
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