Задать вопрос
@ImagineTables

Как отконвертировать 3D-меш в наклонные треугольники?

На входе есть триангулированный 3D-меш, то есть набор треугольников, каждая вершина которого задана тремя координатами:


(x,y,z) — (x,y,z) — (x,y,z)
(x,y,z) — (x,y,z) — (x,y,z)
(x,y,z) — (x,y,z) — (x,y,z)


Это не важно, но для пущей наглядности обозначу: меш получен из прямоугольника, лежащего в горизонтальной плоскости, путём разбиения на квадратные ячейки, ячеек — на два треугольника, и поднятием/опусканием вершин этих треугольников по высоте. То есть, все треугольники смежные и не пересекаются.

На выходе нужно получить набор наклонённых треугольников, то есть таких, которые описаны тремя парами 2D-координат проекций вершин на горизонтальную плоскость, высотой треугольника, и двумя углами:


(x,y) — (x,y) — (x,y) — h — ∠α — ∠β
(x,y) — (x,y) — (x,y) — h — ∠α — ∠β
(x,y) — (x,y) — (x,y) — h — ∠α — ∠β


Изначально мы в горизонтальной плоскости строим проекцию треугольника, для этого используются три пары двухмерных координат. Затем мы по высоте поднимаем/опускаем треугольник целиком. Затем наклоняем треугольник при помощи двух углов.

∠α это угол поворота в горизонтальной плоскости от, допустим, севера. То есть, из начала координат строим отрезок OA на север, затем поворачиваем его по часовой на ∠α, получая отрезок OA`. Затем строим плоскость, перпендикулярную горизонтальной плоскости, и проходящую через отрезок OA`. В этой плоскости и вращаем треугольник на угол ∠β (pivot'ом может быть начало координат или центр, пусть будет начало координат).

Вот скриншот такого треугольника:

avn1fkgvwxh933wzkpqaeidd5a8.png

Очевидно, что (x,y) — (x,y) — (x,y) можно оставить без изменений. Как тройку оставшихся z — z — z конвертировать в h — ∠α — ∠β?
  • Вопрос задан
  • 20 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы