Преобразование 3D плоскости с помощью матрицы 4x4

У меня есть фигура из нескольких треугольников, которая расположена где-то в мировом пространстве с масштабированием, поворотом, переводом. У меня также есть плоскость, на которую я хотел бы спроецировать (ортогонально) фигуру.

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

Но мне не нужно рисовать проекцию, вместо этого я хотел бы преобразовать плоскость с помощью матрицы обратного преобразования фигуры, а затем спроецировать все вершины на (обратно преобразованную) плоскость. Поскольку это требует преобразования плоскости только один раз, а не каждой вершины.

У моей плоскости есть нормаль (xyz) и расстояние (d). Как мне умножить ее на матрицу преобразования 4x4, чтобы все получилось нормально?

Можете ли вы создать vec4 как xyzd и умножить его? Или может создать вектор xyz1 и потом что делать с d?

16
задан Thijs Koerselman 6 January 2018 в 13:32
поделиться

1 ответ

Обозначение :

  • n - это нормаль, представленная как (1x3) вектор-строка
  • n' - преобразованная нормаль для n в соответствии с матрицей преобразования T
  • (n|d) - это плоскость, представленная как (1x4) вектор-строка (с n нормалью плоскости и d расстоянием плоскости до начала координат)
  • (n'|d') является преобразованной плоскостью (n|d) в соответствии с матрицей преобразования T
  • T является (4x4) (аффинной) матрицей преобразования больших столбцов (то есть преобразовывает вектор-столбец) t определяется как t' = T t).

Преобразование нормального n :

n' = n adj(T)

Преобразование плоскости (n | d) :

(n'|d') = (n|d) adj(T)

Здесь adj является адъютатом матрицы, который определяется следующим образом в терминах обратного и определителя матрицы:

T^-1 = adj(T)/det(T)

Примечание :

  • Обычно адъютат не равен обратной матрице преобразования T. Если T включает отражение, det (T) = -1, обращая порядок намотки!

  • Повторная нормализация n 'математически не требуется (но, возможно, численно зависит от реализации), так как масштабирование решается определителем. Благодаря Адриану Леонхарду. [ +1134] [тысяча сто двадцать-восемь]

  • Вы можете напрямую преобразовать плоскость, не разбирая и не перекомпоновывая плоскость (нормаль и точка).
2
ответ дан 30 November 2019 в 17:24
поделиться
Другие вопросы по тегам:

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