【问题标题】:Set SCNNodes to have constant y-axis value?将 SCNNodes 设置为具有恒定的 y 轴值?
【发布时间】: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 = 0newMatrix 以任一方式返回。

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

【问题讨论】:

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

标签: ios swift scenekit


【解决方案1】:

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

我按照rickster 的建议实现了相机节点,并将allowCameraControl 设置为false。然后我实现了一个 UIPanGestureRecognizer 并将其绑定到一个函数,正如 here 建议的那样,这也是基于 rickster 的回答。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2013-05-01
    • 1970-01-01
    相关资源
    最近更新 更多