Titik Potong Ray – OBB

Oriented Bounding Box didefinisikan sebagai bounding box yang mungkin ter-rotasi (direpresentasikan dengan axis 3 vektor), mempunyai titik pusat, dan dimensi/ukuran.

Ingin diketahui apakah Ray memotong OBB,

Diketahui:

  • OBB : axis untuk orientasi OBB, titik pusat, dan dimensi
  • Ray : titik asal dan arah

Analisa:
Mengambil referensi gambar dari opengl-tutorial.org, jika ray tidak memotong OBB, maka urutan perpotongan dengan axis yang membatasi OBB akan menjadi : masuk daerah hijau, keluar daerah hijau, masuk daerah merah, dan keluar daerah merah. Urutan perpotongan ini dapat dilihat di gambar di bawah ini.

Sedangkan jika ray memotong OBB, maka urutan perpotongan akan menjadi : masuk daerah hijau, masuk daerah merah, keluar daerah hijau, keluar daerah merah.

Kedua urutan kejadian tersebut dapat dibedakan dengan cara mencari mengambil maksimum dari t_{near} dan mengambil minimum dari t_{far} dan apabila t_{minfar} > t_{maxnear}, maka ray tersebut memotong OBB.

Setelah tahu kondisi yang menentukan apakah ray memotong OBB atau tidak, t_{near} dan t_{far} perlu dicari tahu.

Perlu diingat bahwa t_{near} tidak selalu dari sebelah kiri (seperti tampak pada gambar). Begitu juga dengan t_{far} tidak selalu dari sebelah kanan. Sehingga setelah menghitung kedua nilai tersebut, t_{near} dan t_{far}, kedua nilai tersebut harus dibandingkan sehingga nilai t_{near} < t_{far}. Terdapat kasus yang harus ditangani kemudian. Bagaimana jika ray tidak memotong salah satu garis axis (dengan kata lain dot(ray, axis_i) sangat mendekati angka 0), maka dapat dilakukan early exit jika abs(e) > \frac{dim_i}{2}

One thought on “Titik Potong Ray – OBB

Leave a Reply

Your email address will not be published. Required fields are marked *