Algoritma BSP Tree Algoritma Manajemen Scene

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