Как «вырезать» кусочек меша по другому мешу?

Здравствуйте. Недавно появилась необходимость реализовать алгоритм, который бы "вырезал"/"выпиливал" объект по другому объекту. Например, есть 2 таких меша (mesh):
cd40b902dbc04795bd563be754e88de1.png
Представим, что белая плоскость на самом деле - большой параллелепипед, но мы видим только небольшую часть его поверхности. Из него необходимо "вырезать" кусочек, который занимает нижняя часть красного параллелепипеда, т. е. добавить соответствующие вершины и треугольники. В результате должен получится такой объект (красным обозначена часть этого объекта для наглядности):
4d55b900a34444d9b864686ff44691d9.png
Пример №2.
Исходные данные:
a12f34d565b34ccbb4c0cdf3f73e5226.png
Из белого параллелепипеда "вырезается" красный эллипсоид. При этом исходный меш делится на 2 части. Результат:
b261224b3eaa4814833fa925a5129b7a.png

На входе у алгоритма есть для каждого меша:
1. Vector3[] (Vector3 - класс, у которого есть float x, float y, float z) - массив координат вершин меша (пример: {(0,0,0),(1,0,0),(0,0,1),(1,0,1)})
2. int[] - массив индексов вершин, из которых составляются треугольники меша (пример: {0, 1, 2, 1, 2, 3} - 2 треугольника, образующие квадрат в плоскости XZ)
На выходе должны быть массив вершин Vector3[] и массив треугольников int[].

Как такое можно реализовать? Что можно почитать по этому поводу?
  • Вопрос задан
  • 1320 просмотров
Решения вопроса 1
Это называется boolean operations, довольно сложная вещь для реализации самому. Лучше взять готовую библиотеку, например https://github.com/gilbo/cork

Начать читать можно отсюда https://en.wikipedia.org/wiki/Constructive_solid_g...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@AlexSku
Программист по автоматике
По-моему, для этого используется stencil buffer (трафарет).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы