Ich verwende ARKit mit SceneKit. Wenn der Benutzer einen Knopf drückt, erstelle ich einen Anker und an den SCNNode, der ihm entspricht, füge ich ein 3D-Objekt hinzu (geladen aus einer .scn-Datei im Projekt).SceneKit - Objekt um die X- und Z-Achse drehen
Das 3D-Objekt wird mit der gleichen Ausrichtung wie die Kamera zur Kamera ausgerichtet. Ich möchte es so aussehen lassen, als ob das Objekt auf einer ebenen Fläche liegt und nicht geneigt ist, wenn es so ist. Also, wenn ich es richtig verstanden habe, müsste ich eine Rotationstransformation anwenden, so dass die Drehung um die X- und Z-Achse 0 wird.
Mein Versuch ist: nimm die Knoten x und z eulerAngles, invertiere sie drehen, und diesen Betrag um jede Achse
let rotationZ = rotationMatrixAroundZ(radians: -node.eulerAngles.z)
let rotationX = rotationMatrixAroundX(radians: -node.eulerAngles.x)
let rotationTransform = simd_mul(rotationTransformX, rotationTransformZ)
node.transform = SCNMatrix4(simd_mul(simd_float4x4(node.transform), rotationTransform))
Dies alles in Ordnung für die meisten Fälle funktioniert, aber in einigen das Objekt in ganz seltsame Weise gedreht. Sollte ich den Drehwinkel auf etwas anderes als nur die Umkehrung des aktuellen Euler-Winkels einstellen? Das direkte Einstellen der Winkel auf 0 hat überhaupt nicht funktioniert.
Verwenden Sie Einschränkungen? –
Nein, ich habe versucht, mit dem SCNLookAtConstraint und der Look (at :) -Methode zu experimentieren, aber keine von ihnen war zufriedenstellend meine Bedürfnisse – leandrodemarco