Ich versuche eine SCNBox
zu drehen, die ich mit swipe gestures
erstellt habe. Zum Beispiel, wenn ich nach rechts streiche, sollte die Box 90 Grad in den Y-axis
und -90degs drehen, wenn ich nach links wische. Um dies zu erreichen, habe ich die SCNAction.rotateByX
Methode des Knotens verwendet, um die Rotationsanimation durchzuführen. Jetzt ist das Problem, das ich habe, wenn man sich entweder entlang der X-axis
oder Z-axis
nach einer Umdrehung in Y-axis
dreht und umgekehrt, dass sich die Positionen der Achsen ändern.So drehen Sie eine SCNBox
Was ich festgestellt habe, ist, dass jede Drehung auf einer der X, Y, Z Achsen die Richtung ändert, in die die anderen Achsen zeigen.
Beispiel: Standardposition
Dann nach einer Drehung im Z-axis
:
Natürlich stellen diese ein Problem jetzt, denn wenn ich swipe left or right
ich nicht mehr die Wunsch-Effekt, weil die X-axis
und Y-axis
jetzt Positionen vertauscht haben. Was ich gerne wissen möchte, warum passiert das? und gibt es trotzdem eine Rotationsanimation ohne die anderen Achsen zu beeinflussen?
Ich entschuldige mich für meinen Mangel an Verständnis zu diesem Thema, da dies mein erster Schritt bei 3D-Grafik ist.
Lösung:
func swipeRight(recognizer: UITapGestureRecognizer) {
// rotation animation
let action = SCNAction.rotateByX(0, y: CGFloat(GLKMathDegreesToRadians(90)), z: 0, duration: 0.5)
boxNode.runAction(action)
//repositoning of the x,y,z axes after the rotation has been applied
let currentPivot = boxNode.pivot
let changePivot = SCNMatrix4Invert(boxNode.transform)
boxNode.pivot = SCNMatrix4Mult(changePivot, currentPivot)
boxNode.transform = SCNMatrix4Identity
}
ich nicht in irgendwelche Probleme läuft habe noch, aber es kann sicherer sein, einen Abschluss-Handler zu verwenden, um alle Änderungen zu X, um sicherzustellen, Y, Z-Achsen durchgeführt werden, bevor sie neu positioniert.
Ist das, was Sie wollen: drehen Modell um die Y-Achse. Drehen Sie jetzt das Modell um die X-Achse, und das Modell verhält sich so, als wäre seine X-Achse nicht von der "Standardposition" entfernt worden. Wenn Sie sich also mit einem Swipe-Right um das Y drehen, wird das Modell, unabhängig davon, wo das Modell endet, durch ein Wischen nach oben um die X-Achse des Bildschirms anstelle der neu positionierten X-Achse des Modells gedreht. Ist es das wonach du suchst? – bpedit
@bpedit, das ist genau das, was ich will, aber scheint nicht einen Weg zu finden, um die Standardpositionen aller Achsen zu erhalten. – RickyTheCoder