У меня есть фигура из нескольких треугольников, которая расположена где-то в мировом пространстве с масштабированием, поворотом, переводом. У меня также есть плоскость, на которую я хотел бы спроецировать (ортогонально) фигуру.
Я мог бы перемножить каждую вершину каждого треугольника в фигуре с матрицей преобразования объектов, чтобы узнать, где она находится в мировых координатах, а затем спроецировать эту точку на плоскость.
Но мне не нужно рисовать проекцию, вместо этого я хотел бы преобразовать плоскость с помощью матрицы обратного преобразования фигуры, а затем спроецировать все вершины на (обратно преобразованную) плоскость. Поскольку это требует преобразования плоскости только один раз, а не каждой вершины.
У моей плоскости есть нормаль (xyz) и расстояние (d). Как мне умножить ее на матрицу преобразования 4x4, чтобы все получилось нормально?
Можете ли вы создать vec4 как xyzd и умножить его? Или может создать вектор xyz1 и потом что делать с d?
Обозначение :
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 'математически не требуется (но, возможно, численно зависит от реализации), так как масштабирование решается определителем. S> Благодаря Адриану Леонхарду. [ +1134] [тысяча сто двадцать-восемь]