2016-04-23 25 views
5

enter image description hereRuota X, Y e Z tutti insieme

ho 3D ruotano una figura piana in Illustrator o Photoshop, ottenere angoli esatti (x, yez) applicato ad esso nello strumento di progettazione e quindi applicare gli stessi angoli di un UILabel posto sopra l'immagine per sincronizzarli visivamente.

Ho capito come ruotare 2 assi contemporaneamente utilizzando CATransform3DConcat, ma poi non sono sicuro di come applicare il terzo.

float angleX = -18 * M_PI/180; 
CATransform3D t1 = CATransform3DMakeRotation(angleX, 1, 0, 0); 
float angleY = -26 * M_PI/180; 
CATransform3D t2 = CATransform3DMakeRotation(angleY, 0, 1, 0); 
CATransform3D combo1 = CATransform3DConcat(t1, t2); 
self.labelPlay.layer.transform = combo1; 

EDIT

Cercando questo ora, ma ancora non va bene. Provato tutte le combinazioni di diversi ordini ma nulla.

float angleX = -18 * M_PI/180; 
CATransform3D t1 = CATransform3DMakeRotation(angleX, 1, 0, 0); 
float angleY = -26 * M_PI/180; 
CATransform3D t2 = CATransform3DMakeRotation(angleY, 0, 1, 0); 
float angleZ = 8 * M_PI/180; 
CATransform3D t3 = CATransform3DMakeRotation(angleZ, 0, 0, 1); 

self.label.layer.transform = CATransform3DConcat(CATransform3DConcat(t3, t2), t1); 
+0

Cosa stai cercando di ottenere? È possibile ruotare in qualsiasi direzione specificando valori diversi per gli argomenti 2 °, 3 ° e 4 per CATransform3DMakeRotation. – jtbandes

+0

Io primo 3D ruoto un quadrato piatto in Illustrator o Photoshop, ottengo gli angoli esatti (x, y e z) applicati ad esso nello strumento di disegno e poi applico gli stessi angoli ad un UILabel posto sopra il quadrato per sincronizzarli visivamente . – durazno

+1

L'ordine sarà importante. Puoi mostrare esattamente cosa vuoi che faccia e cosa invece sta facendo attualmente? – jtbandes

risposta

1

Non ne sono del tutto sicuro, ma penso che potrebbe essere questo.

Per i progettisti che pensano che gli angoli della rotazione 3D in Illustrator/Photoshop funzionino solo con CATransform3D, è quasi vero ma potrebbe essere necessario cambiare una cosa minuscola.

Diciamo che hai x: -18, y: -26 e z: 8 nel tuo strumento di progettazione. Il passaggio da y ez a positivo/negativo ha risolto il mio problema. Così ora ho -

float angleX = -18 * M_PI/180; 
CATransform3D t1 = CATransform3DMakeRotation(angleX, 1, 0, 0); 
float angleY = 26 * M_PI/180; 
CATransform3D t2 = CATransform3DMakeRotation(angleY, 0, 1, 0); 
float angleZ = -8 * M_PI/180; 
CATransform3D t3 = CATransform3DMakeRotation(angleZ, 0, 0, 1); 

self.label.layer.transform = CATransform3DConcat(CATransform3DConcat(t1, t2), t3); 

Non posso dirvi perché esattamente ma questo ruota correttamente.

+0

Stavo arrivando a questa conclusione pure. Se osservi il piccolo glifo accanto al campo -26 °, mostra una rotazione che dovrebbe spostare la faccia del cubo a destra. L'angolo che hai scelto è negativo, eppure la faccia va a destra. Quindi è davvero l'opposto di quello che dovrebbe essere, penso. – jtbandes

+0

È vero .. non me ne sono mai accorto fino ad ora. Ma poi di nuovo se guardi a quello per l'asse Z, anche se insinua l'angolo dovrebbe essere positivo e sembra essere positivo, girandolo in negativo effettivamente ruotato correttamente quindi è confuso. Comunque è risolto yay! – durazno

Problemi correlati