exam20 - MiAneko24/bmstu-cg GitHub Wiki
20. Операции преобразования в трехмерном пространстве. Матрицы преобразований.
Матрица преобразований в 3х-мерном пространстве будет иметь рамзерность 4х4. Координаты точек (x, y, z)
заменятся четверкой (wx, wy, wz, w), w != 0.
Аффинное преобразование (вики) - отображение плоскости или пространства в себя, при котором параллельные прямые переходят в параллельные прямые, пересекающиеся — в пересекающиеся, скрещивающиеся — в скрещивающиеся, а также существует обратное преобразование.
Афиинное преобразование (по Курову) - плоскость не вырождается в прямую или в точку, сохраняется параллельность прямых и существует обратное преобразование.
Любое аффинное преобразование в трехмерном пространстве может быть представлено в виде суперпозиции переносов, масштабирований, поворотов.
Перенос
Матрица преобразований:
Формулы:
x' = x + dx
y' = y + dy
z' = z + dz
Положительные значения dz приводят к удалению точки от наблюдателя в глубь экрана, при отрицательных - точка приближается к наблюдателю.
Масштабирование
Матрица преобразований:
Формулы:
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):
Формулы:
x' = xc + (x - xc) * cosθ - (y - yc) * sinθ
y' = yc + (x - xc) * sinθ + (y - yc) * cosθ
Матрица преобразований (вокург OX):
Формулы:
y' = yc + (y - yc) * cosθ - (z - zc) * sinθ
z' = zc + (z - zc) * cosθ + (y - yc) * sinθ
Матрица преобразований (вокруг OY):
Формулы:
x' = xc + (x - xc) * cosθ + (z - zc) * sinθ
z' = zc + (z - zc) * cosθ - (x - xc) * sinθ
Перспективное проецирование на плоскость z = 0.
Перспективное преобразование — это преобразование одного трехмерного пространства в другое.
- Весь правый столбец отвечает за проецирование на разные плоскости, если бы мы хотели получить проекцию на ось Х, то -1/C было бы в первой строке последнего столбца.
- Проекция на одну плоскость - одноточечное проецирование, но можно совмещать и получать двухточечные проекции и тд.
Матрица преобразований:
С - фокусное расстояние на оси Z
коммутативность.
ПроПредыдущий вопрос: 19. Модели трехмерных объектов. Требования, предъявляемые к моделям.
Следующий вопрос: 21. Трехмерное отсечение. Виды отсекателей. Вычисление кодов концов отрезка для каждого типа отсекателей. Алгоритм отсечения отрезков средней точкой.