swift struct scenekit

swift - Conversión de una estructura a otra



scenekit (1)

Estoy convirtiendo un código Objective-C en código Swift y tengo el siguiente problema:

El código objetivo C es

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

Este es el código convertido que probé:

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

Sin embargo, me sale un error: ''SCNMatrix4 no es convertible a CATransform3D''

Me di cuenta de que CATransform3DInvert toma un parámetro del tipo CATransform3D, mientras que el parámetro que he incluido es del tipo SCNMatrix4.

Intenté el siguiente intento de lanzamiento:

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

Pero esto no funciona.

Luego descubrí que tanto CATransform3D como SCNMatrix4 son estructuras y no estoy seguro de cómo convertir de una estructura a la otra (o incluso si es posible convertir estructuras en Swift).

Tal vez hay otro enfoque más simple?

Cualquier ayuda sería apreciada, gracias.


De acuerdo,

El enlace proporcionado por Airspeed Velocity tiene una buena explicación que es fácil de convertir a Swift (de hecho, es lo mismo).

El CATransform3D, etc, está basado en Mac OS X y no es para iOS; en cambio, en iOS se usa SCNMatrix4, etc. En la publicación vinculada, el archivo de encabezado puede encontrar los tipos utilizados SceneKitTypes.h - si desea ver una copia, está en github aquí: https://github.com/andymatuschak/Khan-Academy-Offer-Acceptance-Toy /blob/master/§/SceneKitTypes.h

Utilicé SCNMatrix4Invert como rintaro mencionado anteriormente y funciona.

Entonces, el código Swift que funciona ahora es:

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