【发布时间】:2016-01-01 00:52:07
【问题描述】:
我有一系列 SCNPlane 类型的对象设置为围绕中心 SCNPlane 旋转,宽度和高度设置为 0。在我的应用程序中加载视图时,我得到以下内容,这表明我的飞机正在正确加载。用我的光标从左到右旋转它们也可以。它看起来像这样:
但是,如果我的光标在 y 方向上移动,则视图最终会发生变化,以便从另一个角度显示显示。基本上,视图最终可能如下所示:
我不希望这种情况发生;我希望第一个图像是我想要的。当我移动光标时,它应该向左或向右移动,而不是向上或向下移动。
这是我尝试做的:
- 将轴心设置为
SCNMatrix4MakeRotation(Float(CGFloat(M_PI_2)), 0, 0, 0) - 将旋转设置为
SCNVector4(1, 0, 1, Float(CGFloat(M_PI_2)) - 将方向设置为
SCNQuaternion(0, 0, 0, Float(CGFloat(M_PI_2)) - 使用
SCNLookAtConstraint函数将所有平面围绕中心坐标居中并朝外 - 将
SCNTransformConstraint函数与一个接收节点的块和一个矩阵(newMatrix = incomingMatrix) 变量一起使用。如果它检测到一个对象的位置的值为 y,那么newMatrix.m42 = 0。newMatrix以任一方式返回。
以上都没有解决我的问题。我什至可以将相机限制在 x 和 z 轴上吗?
【问题讨论】:
-
这听起来像是你在使用内置的相机控制 (
SCNViewallowsCameraControl)。是这样吗?如果是这样,不要。将您自己的相机添加到场景层次结构中,并直接控制其位置(如this answer)。然后,当您将用户输入映射到相机运动时,仅在您希望它移动的轴上移动包含相机的节点。 -
@rickster 我发现你在我问这个问题之前发布的答案。我关心的是弄清楚如何实现输入。我在 in Swift 中找不到关于轨迹球旋转的任何好的资源,而且我不确定如何进行手势映射。我认为第二个在我的情况下会更容易。你能扩展解释吗?数学仍然让我感到困惑。
-
1.如果您正在寻求有关 Apple API 的帮助,而您却忽略了基于 ObjC 的资源,那么您就是在伤害自己。任何“我如何使用 SceneKit 做 X”问题的答案中最重要的部分将是调用哪些 SceneKit API 以及如何围绕它们构建解决方案——实际代码中的语言差异是次要的细节。任何新的 Swift 程序员都应该学习阅读 ObjC(如果不编写它,并且只够理解程序正在做什么并翻译成 Swift)。
-
2.那里没有多少数学。将您的相机放在一个节点上,以便旋转节点围绕相机旋转,如该答案所示。然后当光标/触摸向左移动时,将节点旋转一个方向,当它向右移动时,将节点旋转另一个方向。