Ios 是否将SCNNodes设置为具有恒定的y轴值?
我有一系列的SCNPlane类型对象设置为围绕中心SCNPlane旋转,宽度和高度设置为0。在我的应用程序中加载视图时,我会看到下面的图片,这表明我的飞机正在正确加载。用我的光标从左向右旋转它们也很有效。看起来是这样的: 但是,如果光标沿y方向移动,则视图最终会移动,以便从另一个角度显示显示。基本上,视图最终可能是这样的: 我不希望这种情况发生;我希望第一个图像是我想要的。当我移动光标时,它应该向左或向右移动,而不是向上或向下移动 以下是我尝试过的:Ios 是否将SCNNodes设置为具有恒定的y轴值?,ios,swift,scenekit,Ios,Swift,Scenekit,我有一系列的SCNPlane类型对象设置为围绕中心SCNPlane旋转,宽度和高度设置为0。在我的应用程序中加载视图时,我会看到下面的图片,这表明我的飞机正在正确加载。用我的光标从左向右旋转它们也很有效。看起来是这样的: 但是,如果光标沿y方向移动,则视图最终会移动,以便从另一个角度显示显示。基本上,视图最终可能是这样的: 我不希望这种情况发生;我希望第一个图像是我想要的。当我移动光标时,它应该向左或向右移动,而不是向上或向下移动 以下是我尝试过的: 将轴设置为scnmarix4maker
- 将轴设置为
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
)变量一起使用。如果检测到对象的位置值为y,则会以任意方式返回newMatrix=incomingMatrix
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.这里没有太多的数学运算。将相机放在一个节点上,使旋转节点围绕相机旋转,如该答案所示。然后,当光标/触摸向左移动时,将节点旋转一个方向,当它向右移动时,将节点旋转另一个方向。