exam20 - MiAneko24/bmstu-cg GitHub Wiki

20. Операции преобразования в трехмерном пространстве. Матрицы преобразований.

Матрица преобразований в 3х-мерном пространстве будет иметь рамзерность 4х4. Координаты точек (x, y, z) заменятся четверкой (wx, wy, wz, w), w != 0.

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

Афиинное преобразование (по Курову) - плоскость не вырождается в прямую или в точку, сохраняется параллельность прямых и существует обратное преобразование.

Любое аффинное преобразование в трехмерном пространстве может быть представлено в виде суперпозиции переносов, масштабирований, поворотов.

Перенос

Матрица преобразований:
1

Формулы:

x' = x + dx
y' = y + dy
z' = z + dz

Положительные значения dz приводят к удалению точки от наблюдателя в глубь экрана, при отрицательных - точка приближается к наблюдателю.

Масштабирование

Матрица преобразований:
2

Формулы:

x' = x * kx + (1 - kz) * x
y' = y * ky + (1 - ky) * y
z' = z * kz + (1 - kz) * z

При использовании матрицы, сначала нужно перенести тело и центр масштабирования так, чтобы центр масштабирования оказался в начале координат.

  • При KX = -1, KY = 1, KZ = 1 происходит отображение относительно плоскости YOZ (или ей параллельной);
  • При KX = 1, KY = -1, KZ = 1 происходит отображение относительно плоскости XOZ (или ей параллельной);
  • При KX = 1, KY = 1, KZ = -1 происходит отображение относительно плоскости XOY.
  • При отрицательных значениях коэффициентов масштабирования происходит симметричное отображение масштабируемого объекта относительно соответствующей координатной плоскости.

Поворот.

Матрица преобразований (вокруг OZ):

3

Формулы:

x' = xc + (x - xc) * cosθ - (y - yc) * sinθ
y' = yc + (x - xc) * sinθ + (y - yc) * cosθ

Матрица преобразований (вокург OX):

4

Формулы:

y' = yc + (y - yc) * cosθ - (z - zc) * sinθ
z' = zc + (z - zc) * cosθ + (y - yc) * sinθ

Матрица преобразований (вокруг OY):

5

Формулы:

x' = xc + (x - xc) * cosθ + (z - zc) * sinθ
z' = zc + (z - zc) * cosθ - (x - xc) * sinθ

Перспективное проецирование на плоскость z = 0.

Перспективное преобразование — это преобразование одного трехмерного пространства в другое.

  • Весь правый столбец отвечает за проецирование на разные плоскости, если бы мы хотели получить проекцию на ось Х, то -1/C было бы в первой строке последнего столбца.
  • Проекция на одну плоскость - одноточечное проецирование, но можно совмещать и получать двухточечные проекции и тд.

Матрица преобразований:
6

С - фокусное расстояние на оси Z

Про коммутативность.

Предыдущий вопрос: 19. Модели трехмерных объектов. Требования, предъявляемые к моделям.

Следующий вопрос: 21. Трехмерное отсечение. Виды отсекателей. Вычисление кодов концов отрезка для каждого типа отсекателей. Алгоритм отсечения отрезков средней точкой.