Подтвердить что ты не робот

Нужно лучше и проще понимать CATransform3D

Просматривайте изображения.

Initial PositionAfter Rotation

Итак, это код, который я получил из какого-то онлайн-источника, и он преобразует мой объект. Кроме того, я ничего не понял. Я новичок в CATransform3D и хочу точно знать, как это работает.

CATransform3D transform = CATransform3DIdentity;
transform.m34 = 1.0 / -500;
transform = CATransform3DRotate(transform, 45.0f * M_PI / 180.0f, 0, 1, 0.0f);
_bgView.layer.transform = transform;

Я хочу знать, как этот код работал? Почему мы установили некоторое значение в m34? Я обнаружил, что это своего рода матрица, которая меня даже смущает. Кроме того, что означают аргументы в CATransform3DRotate

Я пытаюсь понять, но не буду дальше.

Я хочу глубокое понимание CATransform3D. Пожалуйста, помогите с любыми статьями, документацией или объясните сами.

Большое спасибо.

4b9b3361

Ответ 1

Я не уверен, что m34 не выглядит.

Двумерное вращение легко, потому что все, что ему нужно, - это угол поворота. Затем выполняется поворот ВОКРУГ по оси Z (т.е. Ось, которая указывает прямо из экрана).

Вращение 3D отличается. Он нуждается в угле, но также он должен знать, какую ось (или оси) вы вращаете вокруг.

В CATransform3DRotate вы даете ему пять параметров...

  • Преобразование, к которому вы хотите применить поворот.
  • Угол (в радианах) π радиан = 180 градусов 3, 4 и 5 - то, какая часть угла поворота применяется к каждой оси.

  • Ось X - это ось, которая идет слева от экрана справа от экрана.

  • Ось Y - это ось, которая идет от верхней части экрана до нижней части экрана.
  • Ось Z - это ось, которая указывает прямо из экрана прямо к вам.

Вращение, которое вы применили в вашем примере, выглядит следующим образом:

угол = 45 градусов (преобразуется в радианы). X = 0 Y = 1 Z = 0

Это означает, что все 45 градусов будут повернуты вокруг оси Y. то есть он будет вращаться, как вращающаяся дверь вокруг линии вниз по середине.

Если у вас были параметры... "1, 0, 0" в конце, тогда он вращался бы как лопатка лодку. "Отпасть от тебя".

Наконец, если у вас есть "0, 0, 1", он будет вращаться, как колесико на экране.

Вы также можете комбинировать значения, т.е. иметь "0, 1, 1", чтобы применить поворот вокруг двух осей.

Строка w матрицы представляет собой перспективную проекцию. Вы когда-нибудь делали перспективный рисунок в школе, где вы ставили точку и рисовали линии из точки, а затем рисовали вещи, чтобы соответствовать этим линиям, чтобы дать ей перспективу? Ну значение m34 определяет, где находится эта точка, и поэтому обеспечивает перспективу. Установите его как -50, и вы увидите большую разницу.

Значение m34 относится к значению оси Z этой точки. Таким образом, точка помещается в (0, 0, -1/500)

Ответ 2

Значение m34 является третьей строкой, четвертым столбцом и является значением в матрице за преобразованием, которое фактически дает перспективу вращения.

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

Относительно значений для CATransform3DRotate(...).

  • Первый аргумент - это преобразование, которое вы вращаете
  • Второй - это угол (в радианах),
  • Другими тремя аргументами являются ось, вокруг которой вы вращаетесь вокруг ((x, y, z)).