我正在使用iOS SceneKit框架构建360视频查看器.
我想使用UIPanGestureRecognizer来控制相机的方向.
SCNNode有几个属性我们可以用来指定它们的旋转:( rotation旋转矩阵),orientation(四元数),eulerAngles(每个轴角度).
我读过的所有内容都说避免使用欧拉角来避免万向节锁定.
我想使用四元数有几个原因,我不会在这里讨论.
我无法让它正常工作.相机控制几乎就是我想要的地方,但有些不对劲.尽管我试图仅影响X和Y轴,但看起来好像相机正绕着Z轴旋转.
我相信这个问题与我的四元数乘法逻辑有关.多年来我没有做过与四元数相关的任何事情:(我的平移手势处理程序在这里:
func didPan(recognizer: UIPanGestureRecognizer)
{
switch recognizer.state
{
case .Began:
self.previousPanTranslation = .zero
case .Changed:
guard let previous = self.previousPanTranslation else
{
assertionFailure("Attempt to unwrap previous pan translation failed.")
return
}
// Calculate how much translation occurred between this step and the previous step
let translation = recognizer.translationInView(recognizer.view)
let translationDelta = CGPoint(x: translation.x - previous.x, y: translation.y - previous.y)
// Use …Run Code Online (Sandbox Code Playgroud)