diberikan satu set simpul dan segitiga untuk setiap mesh. Apakah ada yang tahu tentang algoritma, atau tempat untuk mulai mencari (saya mencoba google terlebih dahulu tetapi belum menemukan tempat yang baik untuk memulai) untuk melakukan operasi boolean pada jerat tersebut dan mendapatkan satu set simpul dan segitiga untuk mesh yang dihasilkan? Yang menarik adalah pengurangan dan persatuan.
Contoh gambar: http://www.rhino3d.com/4/help/Commands/Booleans.htm
sumber
Saya pikir kita dapat memecahkannya jika kita hanya memikirkannya.
Anda tentu ingin membuat wajah (segitiga) tempat kedua geometri berpotongan. Kemudian Anda pergi dengan tiga jerat: persimpangan Anda baru saja diisolasi, geometri 1, dan geometri 2.
Kemudian, hapus saja apa yang tidak Anda butuhkan!
Saya pikir itu menutupinya, eh? Bagian yang sulit jelas akan membuat wajah persimpangan. Untuk itu, ulangi setiap wajah satu dan periksa apakah wajah itu adalah bagian dari yang lain; jika benar-benar di dalam, salin wajah sebagai bagian dari persimpangan persimpangan. Jika sebagian berada di dalam, maka Anda perlu membagi segitiga di sepanjang garis persimpangan; Saya pikir DirectX dan OpenGL keduanya akan memiliki fungsi pembantu untuk ini, atau itu hanya beberapa bidang matematika 3D (vektor). Saya belajar hal semacam itu dalam Kalkulus 3 (atau apakah itu 2?) Tetapi jika Anda tidak memiliki petunjuk, mungkin bertanya di math.stackexchange.com . Dan tentu saja jika wajahnya ada di luar, jangan lakukan apa-apa. Setelah Anda mengulangi semua wajah dari kedua jerat Anda akan ditinggalkan dengan persimpangan mesh.
sumber
Jika Anda berurusan dengan model poligonal, Anda mungkin harus berurusan dengan geometri yang tidak berlipat ganda, yang berarti pertanyaan tentang apa yang "di dalam" dan apa yang "di luar" tidak didefinisikan. Sulit untuk melakukan operasi boolean jika Anda tidak tahu apakah Anda memiliki 0 atau 1.
Anda juga harus berurusan dengan kasus pinggiran seperti poligon co-planar, poligon yang berpotongan tepi, simpul yang terletak di tepi dan / atau wajah, dan hal-hal semacam itu. Tidak ada yang tidak mungkin, Anda hanya perlu cara yang sangat kuat untuk mewakili data mesh Anda, dan definisi yang ketat tentang apa yang Anda harapkan terjadi dalam kasus tersebut.
sumber
Perlu dicatat bahwa sebagian besar operasi Anda dapat diwakili oleh negasi dan penyatuan, di mana negasi dari beberapa geometri hanya geometri dengan normalnya yang dibalik. Jadi, jika Anda bisa mendapatkan serikat dengan benar, maka operasi lain hanya harus mengikuti:
Sander memiliki beberapa posting blog yang cukup baik yang membahas implementasi CSG: http://sandervanrossen.blogspot.com/search/label/CSG
sumber
Ini adalah subjek yang cukup rumit, setidaknya jika Anda ingin melakukannya dengan kuat (floating point menyebabkan beberapa kesulitan serius).
Saya akan mengarahkan Anda ke literatur komputasi geometri / komputer grafis pada subjek, terutama makalah ini:
http://homes.cs.washington.edu/~gilbo/repofiles/booleans2009.pdf
http://openflipper.org/uploads/media/campen_2010_eg_02.pdf
sumber