Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 是否将SCNNodes设置为具有恒定的y轴值?_Ios_Swift_Scenekit - Fatal编程技术网

Ios 是否将SCNNodes设置为具有恒定的y轴值?

Ios 是否将SCNNodes设置为具有恒定的y轴值?,ios,swift,scenekit,Ios,Swift,Scenekit,我有一系列的SCNPlane类型对象设置为围绕中心SCNPlane旋转,宽度和高度设置为0。在我的应用程序中加载视图时,我会看到下面的图片,这表明我的飞机正在正确加载。用我的光标从左向右旋转它们也很有效。看起来是这样的: 但是,如果光标沿y方向移动,则视图最终会移动,以便从另一个角度显示显示。基本上,视图最终可能是这样的: 我不希望这种情况发生;我希望第一个图像是我想要的。当我移动光标时,它应该向左或向右移动,而不是向上或向下移动 以下是我尝试过的: 将轴设置为scnmarix4maker

我有一系列的SCNPlane类型对象设置为围绕中心SCNPlane旋转,宽度和高度设置为0。在我的应用程序中加载视图时,我会看到下面的图片,这表明我的飞机正在正确加载。用我的光标从左向右旋转它们也很有效。看起来是这样的:

但是,如果光标沿y方向移动,则视图最终会移动,以便从另一个角度显示显示。基本上,视图最终可能是这样的:

我不希望这种情况发生;我希望第一个图像是我想要的。当我移动光标时,它应该向左或向右移动,而不是向上或向下移动

以下是我尝试过的:

  • 将轴设置为
    scnmarix4makerotation(Float(CGFloat(M_PI_2)),0,0,0)
  • 将旋转设置为
    scinvector4(1,0,1,Float(CGFloat(M_PI_2))
  • 将方向设置为
    scnqueternion(0,0,0,Float(CGFloat(M_PI_2))
  • 使用
    SCNLookAtConstraint
    功能使所有平面围绕中心坐标居中并朝外
  • SCNTransformConstraint
    函数与接收节点的块和矩阵(
    newMatrix=incomingMatrix
    )变量一起使用。如果检测到对象的位置值为y,则会以任意方式返回
    newMatrix.m42=0
    newMatrix

以上这些都没有解决我的问题。我甚至可以将相机限制在x轴和z轴上吗?

我花了几天时间,但我终于找到了解决办法

我按照rickster的建议实现了camera节点,并将allowsCameraControl设置为false。然后,我实现了一个UIPangestureRecognitor,并将其绑定到一个函数,该函数也基于rickster的答案


它现在做了我想要的。非常感谢大家!

这听起来像是在使用内置的摄影机控件(
SCNView
allowsCameraControl
)。是这样吗?如果是这样,不要。将您自己的摄影机添加到场景层次结构中,并直接控制其位置(如中所示)。然后,当您将用户输入映射到摄影机运动时,只将包含摄影机的节点移动到您希望其移动的轴上。@rickster我在问问题之前找到了您发布的答案。我关心的是如何实现输入。在Swift中,我找不到任何关于arcball旋转的好资源,我也不确定该如何实现能够做手势映射。我认为第二个在我的情况下会更容易;你能扩展解释吗?数学仍然让我困惑。1.如果你在寻找苹果API的帮助,而你忽视了基于ObjC的资源,你在伤害自己。任何问题答案中最重要的部分是“如何使用SceneKit实现X”的问题将是调用什么SceneKit API以及如何围绕它们构建解决方案——实际代码中的语言差异是次要的细节。任何新的Swift程序员都应该学习阅读ObjC(如果不编写它,只需充分了解程序正在做什么并翻译成Swift).2.这里没有太多的数学运算。将相机放在一个节点上,使旋转节点围绕相机旋转,如该答案所示。然后,当光标/触摸向左移动时,将节点旋转一个方向,当它向右移动时,将节点旋转另一个方向。