LINUX.ORG.RU

[тупизна] Кабинетная проекция и метод z-буфера.


0

1

Есть каркасная модель, отображающаяся на дисплее в кабинетной проекции. У нее нужно убрать невидимые линии и грани. Я подумал, что для этого подошел бы метод z-буфера, но как реализовать его в такой ситуации, немного не понимаю. Нам нужно найти уравнение плоскости для каждой грани и вычислить z для каждой ее точки.
Уравнение плоскости, проходящей через 3 точки можно найти как
det { {x-x1, x2-x1, x3-x1}, {y-y1, y2-y1, y3-y1}, {z-z1, z2-z1, z3-z1} }.
Какие значения нужно подставлять в качестве x[1..3], y[1..3], чтобы получить корректные результаты ? Очевидно, что не соответствующие координаты трехмерных точек модели, и не координаты спроецированных точек (иначе какие откуда брать значения z для них).

Можно ли адаптировать метод z-буфера к кабинетному проецированию или существуют ли другие достаточно простые методы отсечения невидимых граней и ребер?

★★★

Если 3 вектора образуют правую тройку (или векторное произведение двух и третий - совпадают по знаку) - то это видимая грань. В случае левой тройки - грань невидимая (кажется, такое соглашение). У бесконечно тонкой плоскости фактически 2 стороны: одна нам видимая, другая - «глядит» в другую сторону и невидимая. Z-буфер же немного другое: только после подсчёта видимости - мы начинаем проецировать все _видимые_ плоскости на одну плоскость, плоскость камеры/экрана. Т.е. последний поможет только в определении - какой объект заслоняется другим объектом (какая видимая плоскость скрывает другию видимую плоскость), но - не решает вопрос - кто из нашего мира, а кто - из параллельного мира «внутренностей» фигур. (Если что - прошу не пиннать: я профессионально не занимался 3д, так мелочи, просто моё понимание из линейки, где склероз тоже может подвести).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.