Вот что сказал мне лектор в курсовой работе:
Мы рассматриваем только 4 * 4 матрицы. Они используются для вращения, масштабирования или перемещения объектов (или любой комбинации этих операций). Матрицы также используются позже при реализации модели виртуальной камеры. Если вы не знаете разницу между векторным преобразованием и точечным преобразованием, найдите его.
Я не могу найти ответ и создал аккаунт для этого сайта только для этого вопроса.
Ответы:
Вот простой ответ.
В 4D, чтобы иметь возможность умножить их на матрицу 4x4, векторы представлены как (x, y, z, 0), а точки представлены как (x, y, z, 1).
Так как 4-я строка матрицы 4x4 представляет перевод матрицы, приведенные выше представления делают так, что точки влияют на перевод, а векторы - нет.
Хотя на векторы и точки влияет вращение, масштабирование и т. Д.
Предостережение:
Следует ожидать более глубокого обсуждения, если вы ожидаете, что векторы будут иметь определенные свойства. Например, если вы преобразуете нормаль треугольника по той же матрице, что и трансформируете его вершины, скорее всего, он больше не будет вектором нормали этого треугольника. Это потому, что нормальные векторы имеют своего рода обратную связь с вершинами, из которых они рассчитаны.
источник
Из того, что я узнал, так как я еще и учусь, то, что вы хотите работать с матрицами, чтобы обрабатывать повороты, масштабирование и переводы одинаково, то есть умножать на матрицу (т.е. , а матрицы).4×4 4×4
Помните, что без этих матриц переводы были бы представлены суммированием с вектором, тогда как вращения и масштабирование представлены с использованием умножений с вектором и скалярным коэффициентом соответственно.4×4
Теперь вопрос: как перейти от трехмерных систем координат к четырехмерным ? Ответ - " однородные координаты ".
Итак, что это значит? Мы строим матрицы × для представления поворотов, масштабирования и сдвига, поэтому мы используем только умножения матриц для представления преобразований (например, поворотов, масштабирования и т. Д.). Как мы их строим индивидуально, это более конкретно, но вы можете посмотреть его в Интернете.4×4
На данный момент у нас есть умножить на матрицы и трехмерные векторы, но пока это не полезно, потому что вы не можете умножить умножить на матрицы и векторы, поскольку размеры не совпадают. Вот почему, когда мы работаем с гомогенными координатами, нам также необходимо преобразовать наши заданные трехмерные точки в соответствующие четырехмерные.4×4 4×4 3D
Как мы делаем это?
Мы различаем векторы направления и положения . Векторы направления, как следует из названия, имеют направление, на которое они указывают; мы также заботимся об их длине, но на них не влияют переводы, так как нас не заботит их положение. Векторы положения (или просто «точки») могут быть переведены или перемещены; они обычно представлены относительно начала координат, то есть как вектор от начала координат до самой точки.
Мы преобразуем трехмерные векторы направления, добавляя в качестве й координаты соответствующего однородного вектора: мы добавляем ноль, потому что это в основном устраняет эффект трансляций. Мы делаем то же самое с векторами положения, но вместо мы добавляем по противоположной причине.0 4 0 1
Например, если у нас есть вектор направления , мы преобразуем его, выполнив . Аналогично, если бы у нас был точечный вектор мы бы преобразовали его в3D v=⎛⎝⎜v1v2v3⎞⎠⎟ v′=⎛⎝⎜⎜⎜v1v2v30⎞⎠⎟⎟⎟ u=⎛⎝⎜u1u2u3⎞⎠⎟ u′=⎛⎝⎜⎜⎜u1u2u31⎞⎠⎟⎟⎟
Примечание: чтобы преобразовать из однородных координат обратно в соответствующие , вы не можете просто удалить координату, если она по- прежнему не равна (или соответственно).3D 4th 1 0
источник
Если вы посмотрите определение вектора и точки, то вектор:
И дело в том:
Таким образом, вы можете сказать, что вектор - это направление с масштабом, а точка - это местоположение.
Итак, если вы преобразуете вектор, вы просто вращаете и масштабируете его. С помощью точки вы также переводите ее (вращение и масштабирование точки происходит вокруг начала координат, поскольку это просто место, в котором сама точка не может быть повернута).
В большинстве случаев вектор и точка помещаются в один контейнер, вектор с 4 компонентами. Единственная разница - это компонент w. Если компонент w равен 0, то это направление. Если это 1, то вектор является точкой.
Причину этого можно найти в самой матрице. Он использует способ умножения вектора на 4 компонента с матрицей 4x4. Если вы не знаете, как это работает, я бы предложил быстрый Google.
В большинстве случаев вы используете матрицу 4х4. Обычная матрица преобразования может выглядеть следующим образом: (вращение Вы можете сказать, что масштаб и масштаб находятся в области 3x3, так что для поворота и масштабирования можно также использовать матрицу 3x3, но когда приходит перевод, нам нужен этот 4-й столбец.)
Как вы можете видеть, если последний компонент равен 0, то у вас есть умножение с 0, и, следовательно, результат равен 0, и нет перевода.
Это облегчает работу в компьютерной графике с полигональными объектами. У вас есть та же матрица преобразования для преобразования позиций, но и нормали. Поскольку для нормали их компонент w установлен на 0, а для компонента w позиций - 1, нормали просто поворачиваются (и также масштабируются, что может привести к некоторым странным вещам, поэтому в большинстве случаев нормализация нормализуется после. Это не ' На самом деле рекомендуется использовать одну и ту же матрицу для позиций и поворотов из-за странных вещей! Посмотрите на комментарий @JarkkoL.) и позиции будут переведены (и повернуты и масштабированы вокруг начала координат).
Надеюсь, я не ошибся: P, и это помогло вам!
источник