Как скрыть / не нарисовать часть модели - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть анимированная модель, которая вращается.

Я хочу скрыть / не нарисовать какую-либо часть модели, которая Y <0 </p>

как я могу это сделать?

идеи:

1) нарисуйте гигантский прямоугольник прямо под y = 0

2) настроить матрицу камеры так, чтобы y <0 находилось вне плоскости отсечения (но я понятия не имею, как) </p>

Может ли кто-нибудь указать мне правильное направление? =)

Ответы [ 2 ]

0 голосов
/ 03 ноября 2011

Чисто математический подход:

  • Не рисуйте полигоны, у которых все меньше 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>

Если полигоны сопоставлены с текстурой, вам необходимо пересчитать координаты текстуры для вершин, которые вы получили из отсечения,Вы делаете это таким же образом.

0 голосов
/ 03 ноября 2011

Похоже, вам нужно ввести MSDN Bounding Frustum

Вот хороший учебник с сайта GameDev от Nic * .

...