CATransform3D порядок строк / столбцов - PullRequest
5 голосов
/ 07 февраля 2011

У меня есть некоторая путаница в отношении порядка строк / столбцов матрицы структуры CATransform3D. Структура определяет матрицу следующим образом:

[m11 m12 m13 m14]
[m21 m22 m23 m24]
[m31 m32 m33 m34]
[m41 m42 m43 m44]

Сначала может показаться, что значения определяют строки (так что [m11 m12 m13 m14] образует первую строку), но при создании матрицы перевода с помощью (tx, ty, tz) матрица будет выглядеть это:

[ 1  0  0  0]
[ 0  1  0  0]
[ 0  0  1  0]
[tx ty tz  1]

Мое замешательство связано с тем, что это недопустимая матрица перевода; умножение его на 4-элементный вектор-столбец не сместит точку.

Я предполагаю, что структура CATransform3D хранит значения в порядке столбцов, так что значения [m11 m12 m13 m14] образуют первый столбец (а не первую строку).

Кто-нибудь может подтвердить?

Ответы [ 2 ]

5 голосов
/ 10 февраля 2011

Да, CATransform3D в главном порядке столбца, потому что именно так OpenGL (ES) хочет этого.Core Animation использует GL в качестве фона для рендеринга.Если вам нужны доказательства, проверьте страницу man для glMultMatrix:

ПАРАМЕТРЫ

m Указывает на 16 последовательныхзначения, которые используются в качестве элементов основной матрицы столбцов 4 x 4.16 последовательных значений, которые используются в качестве элементов основной матрицы столбцов 4 x 4.

Это действительно должно быть большеясно в документах для CALayer.

3 голосов
/ 07 мая 2013

Ваша первоначальная интерпретация была правильной; CATransform3D определяет матрицу ниже:

[m11 m12 m13 m14]
[m21 m22 m23 m24]
[m31 m32 m33 m34]
[m41 m42 m43 m44]

И да, хотя это может сбивать с толку (если вы привыкли предварительно умножать матрицы преобразования), это дает матрицу перевода:

[ 1  0  0  0]
[ 0  1  0  0]
[ 0  0  1  0]
[tx ty tz  1]

См. Рисунок 1-8 в «Руководстве по программированию базовой анимации» .

Эта является действительной матрицей преобразования, если вы пост умножаете свои матрицы преобразования, что и делает Apple в Core Animation (см. Рис. 1-7 в том же руководстве, хотя Остерегайтесь уравнения пропускает операции транспонирования).

...