Вы задаете интересный вопрос, частично не включая полное определение трехмерной фигуры. Вам нужно указать либо вершины и ребра, либо алгоритм для получения ребер из списка вершин. Поскольку алгоритм для получения ребер из списка вершин сводится к заданию вершин и ребер, я рассмотрю только этот случай здесь. Мое описание также работает лучше всего, когда вершины и ребра превращаются в список плоских многоугольников. Чтобы разбить список вершин на полигоны, вы должны найти циклы в неориентированном графе, который создается вершинами и ребрами. Для треугольного многоугольника с вершинами A, B и C вы получите ребра AB, BC и AC.
Самый простой алгоритм, который я могу придумать:
Преобразуйте все точки так, чтобы ваша 2D-плоскость, где ось Z была равна 0. (поверните, поверните и переместите, как требуется, чтобы преобразовать желаемую 2D-плоскость в линию с плоскостью XY, где Z = 0).
Для каждого плоского многоугольника:
a. Для каждого ребра проверьте, имеют ли вершины противоположный знак на оси Z (или один из них равен 0). Если Z0 * Z1 <= 0, то это так <br>
b. Используйте определение линии и решите для точки, где Z = 0. Это даст вам X, Y пересечения.
c. Теперь у вас есть точка, линия или многоугольник, представляющий пересечение исходного плоского многоугольника из шага 1, пересекающего 2D-плоскость.
d. Заполните многоугольник, образованный формами (при желании). Если ваш пакет 2D-рендеринга не создаст многоугольник из списка вершин, вам нужно начать рендеринг пикселей с использованием линий сканирования.
Каждый из отдельных алгоритмов должен быть в «Алгоритмах на С» или аналогичных.
Графические программы могут быть весьма полезными, когда они начинают работать.
Развлекайся,
Jacob