Преобразование из одной структуры в другую

Я конвертирую код Objective-C в код Swift, и у меня есть следующая проблема:

Код Objective-C

SCNNode *textNode  = [SCNNode nodeWithGeometry:text];
textNode.transform = CATransform3DInvert(self.chartNode.worldTransform);

Это преобразованный код, который я пробовал:

 let textNode = SCNNode(geometry: text)
 textNode.transform = CATransform3DInvert(self.chartNode.worldTransform)

Однако я получаю сообщение об ошибке: "SCNMatrix4 не конвертируется в CATransform3D"

Я понял, что CATransform3DInvert принимает параметр типа CATransform3D, а параметр, который я включил, имеет тип SCNMatrix4.

Я попробовал следующую попытку броска:

textNode.transform = CATransform3DInvert(CATransform3D(self.chartNode.worldTransform))

но это не работает.

Затем я обнаружил, что оба CATransform3D и SCNMatrix4 являются двумя структурами, и я не уверен, как конвертировать из одной структуры в другую (или даже если можно преобразовать между структурами в Swift?)

Может быть, есть еще один более простой подход?

Любая помощь будет оценена - Спасибо.

Ответ 1

Хорошо,

Ссылка, предоставленная Airspeed Velocity, имеет приятное объяснение, которое легко преобразовать в Swift (на самом деле это то же самое).

CATransform3D и т.д. - это Mac OS X и не для iOS - вместо этого используется iOS SCNMatrix4 и т.д. В связанной записи - файл заголовка вы можете найти используемые типы SceneKitTypes.h - если вы хотите посмотреть, что копия находится на github здесь: https://github.com/andymatuschak/Khan-Academy-Offer-Acceptance-Toy/blob/master/§/SceneKitTypes.h

Я использовал SCNMatrix4Invert как rintaro, упомянутый выше, и он работает.

Итак, теперь работает код Swift:

let textNode = SCNNode(geometry: text)
textNode.transform = SCNMatrix4Invert(self.chartNode.worldTransform)