Tôi nghĩ rằng chúng ta có thể giải đố nếu chúng ta chỉ nghĩ về nó.
Bạn rõ ràng sẽ muốn tạo ra các khuôn mặt (hình tam giác) nơi hai hình học giao nhau. Sau đó, bạn còn lại ba lưới: giao điểm bạn vừa cách ly, hình 1 và hình 2.
Sau đó, chỉ cần xóa những gì bạn không cần!
- BooleanDifference: xóa phần bị cô lập và hình học 2.
- BooleanIntersection: xóa hình học 1 và 2, để lại phần bị cô lập
- BooleanUnion: hợp nhất hình học 1 và 2 và xóa phần bị cô lập (đảm bảo ghép các hình học 1 và 2 lại với nhau thành một hình dạng rắn)
- BooleanSplit: Tách hình học 1, hình 2 và sao chép phần bị cô lập (gắn một hình với hình 1 và phần kia vào hình 2)
Tôi nghĩ rằng nó bao gồm nó, eh? Phần khó khăn rõ ràng sẽ tạo ra các mặt giao nhau. Đối với điều đó, lặp qua từng mặt của một mặt và kiểm tra xem mặt đó có phải là một phần của mặt kia không; nếu nó hoàn toàn bên trong, thì sao chép khuôn mặt như một phần của lưới giao nhau. Nếu nó nằm một phần bên trong, thì bạn cần chia tam giác dọc theo đường giao nhau; Tôi nghĩ DirectX và OpenGL đều có chức năng trợ giúp cho việc này, hoặc đó chỉ là một số phép toán mặt phẳng 3D (vectơ). Tôi đã học được điều đó trong Giải tích 3 (hoặc là 2?) Nhưng nếu bạn không có manh mối, có thể hỏi tại math.stackexchange.com . Và dĩ nhiên nếu mặt ở ngoài, không làm gì cả. Khi bạn lặp lại trên tất cả các mặt của cả hai mắt lưới, bạn sẽ bị bỏ lại với lưới giao nhau.