Чисто математический подход:
- Не рисуйте полигоны, у которых все меньше 0.
- Нарисуйте полигоны, у которых все больше или равны 0.
- Обрезайте остальные многоугольники плоскостью y = 0 и нарисуйте их.
Если многоугольники, составляющие модель, представляют собой треугольники, отсечение их довольно тривиально.Вам нужно обрезать две стороны, пересекающиеся с плоскостью y = 0, и заменить исходные вершины, у которых меньше 0, точками пересечения этих двух сторон с плоскостью отсечения.
Используйте линейные уравнения:
(x-x1) = (x2-x1) * (y-y1) / (y2-y1)
(z-z1) = (z2-z1) * (y-y1) / (y2-y1)
, где 1 и 2 - вершины стороны, обрезанной плоскостью y = 0.Подставьте их координаты (x1, y1, z1, x2, y2, z2) и y = 0 в уравнения, чтобы получить x и z точки пересечения.Используйте координаты этой точки вместо вершин 1 или 2 (в зависимости от того, где y <0). </p>
Если полигоны сопоставлены с текстурой, вам необходимо пересчитать координаты текстуры для вершин, которые вы получили из отсечения,Вы делаете это таким же образом.