EDITEDБагги CATransform3D?
(пример содержал ошибку, поэтому я заменил его другим)
Следующий код является всего лишь пример того, как это работает:
CATransform3D temp = CATransform3DIdentity;
temp.m34 = -0.002;
temp = CATransform3DTranslate(temp, 0, -230, 0);
temp = CATransform3DRotate(temp, -M_PI/5, 1, 0, 0);
temp = CATransform3DTranslate(temp, 0, 230, 0);
Выходной до последнего строка кода:
(lldb) po temp
(m11 = 1, m12 = 0, m13 = 0, m14 = 0, m21 = 0, m22 = 0.809017002, m23 = -0.587785244, m24 = 0.00117557053, m31 = 0, m32 = 0.587785244, m33 = 0.809017002, m34 = -0.00161803409, m41 = 0, m42 = -230, m43 = 0, m44 = 1)
Выход после последней строки кода:
(lldb) po temp
(m11 = 1, m12 = 0, m13 = 0, m14 = 0, m21 = 0, m22 = 0.809017002, m23 = -0.587785244, m24 = 0.00117557053, m31 = 0, m32 = 0.587785244, m33 = 0.809017002, m34 = -0.00161803409, m41 = 0, m42 = -43.9260902, m43 = -135.190613, m44 = 1.27038121)
Что такое ...? Последняя строка кода ничего не делает, потому что это E
(это матрица отступа и умножение с ней должно возвращать тот же результат), но она изменила даже элемент m44, который должен всегда равняться 1.
И даже если это матрица выполняет те же вычисления, что и правильный, например, я не могу просто вернуть значение преобразования, которое хранится в нем.
Может ли кто-нибудь предложить решение, как создавать правильные матрицы (m44 == 1), за исключением того, что они умножают их вручную?
Немного трудно сказать здесь, не могли бы вы показать свой код _real_? – Unheilig
Что вы не можете понять конкретно? 'A' ->' A'', где 'A'' надежно имеет' m44 == 1', используя функции Objective-C? В другом тексте описывается конкретный пример и неожиданный результат. –
Отредактировано: исправлена ошибка. –