私はかなり新しく、Apple の ARKit を試しています。ARCamera の回転情報について質問があります。写真をキャプチャし、撮影した各画像でカメラの現在の位置、向き、回転を保存しています。アイデアは、これらの画像を使用して 2D 平面ノードを作成し、それらをキャプチャしたときと同じ位置/方向/回転 (原点に対して) で別のビューに表示することです (あたかも画像が空中で静止しているかのように)彼らは捕らえられました)。位置情報は正常に機能しているようですが、self.sceneView.session.currentFrame?.camera.eulerAngles と self.sceneView.pointOfView? .orientation vs self.sceneView.pointOfView?.rotation.
これは、2D イメージ プレーンを設定する方法です。
let imagePlane = SCNPlane(width: self.sceneView.bounds.width/6000, height: self.sceneView.bounds.height/6000)
imagePlane.firstMaterial?.diffuse.contents = self.image//<-- UIImage here
imagePlane.firstMaterial?.lightingModel = .constant
self.planeNode = SCNNode(geometry: imagePlane)
次に、 xself.planeNode.eulerAngles.x
を使用して画像がキャプチャされているビューから取得した値に設定しますself.sceneView.session.currentFrame?.camera.eulerAngles.x
(y と z についても同じことを行います)。
次に、ノードの回転を次のように設定しますself.planeNode.rotation.x = self.rotX
(ここで、self.rotX は取得元の情報ですself.sceneView.pointOfView?.rotation.x
)。
また、次のように設定しようとしました。
let xAngle = SCNMatrix4MakeRotation(Float(self.rotX), 1, 0, 0);
let yAngle = SCNMatrix4MakeRotation(Float(self.rotY), 0, 1, 0);
let zAngle = SCNMatrix4MakeRotation(Float(self.rotZ), 0, 0, 1);
let rotationMatrix = SCNMatrix4Mult(SCNMatrix4Mult(xAngle, yAngle), zAngle);
self.planeNode.pivot = SCNMatrix4Mult(rotationMatrix, self.planeNode.transform);
ドキュメントには、eulerAngles はロール、ピッチ、ヨーの値におけるカメラの「向き」であると記載されていますが、self.sceneView.pointOfView?.orientation は何に使用されるのでしょうか?
では、平面ノードの位置、方向、および回転を指定するとき、eulerAngles から取得した情報は、画像の正しい方向をキャプチャするのに十分でしょうか?
これに対する私のアプローチは完全に間違っていますか、それとも明らかな何かが欠けていますか? どんな助けでも大歓迎です!