SceneKit 和由于用户滑动而围绕点旋转

问题描述 投票:0回答:1

我正在继续别人的一个项目,在这个项目中我正在查看我不太理解的代码。我以前没有使用过 SceneKit ...所以我正在尽力学习。

我们在 SCNView 中显示一个对象。

  • 用户可以用一根手指滑动,向上、向下、向左或向右旋转对象。因此,围绕垂直于相机轴的轴旋转。
  • 用户可以用 2 个手指旋转,使物体绕“相机轴”旋转。
  • 用户可以通过两根手指捏合来缩放。
  • 用户可以用 2 个手指滑动来滑动对象。

我知道......当我说物体移动或旋转时,这实际上可能意味着物体是静止的,但相机正在向相反的方向移动或旋转。

  1. 我在 SCNView 上没有看到任何 GestureRecognisers ...这是否意味着有内置的 GestureRecognisers (例如在 SCNView::defaultCameraController 中)?如果是这样,如何稍微改变它们(而不是必须完全重建这种行为)?

  2. 我如何知道用户正在做某事(例如一根或两根手指拖动,或两根手指旋转)?比如,我可以实现一个 Delegate 函数或者设置一个闭包、Notification 或 GestureRecogniser 处理程序来查看发生了什么吗?我认为,如果用户正在移动对象(两指拖动),我必须更改相机的目标,以便当用户稍后“单指拖动”时,该对象似乎围绕不同的中心旋转? SCNSceneRendererDelegate::renderer,updateAtTime 已实现,但我担心无论用户是否正在做某事,每一帧都会调用它:我认为太频繁了。

  3. 如何“忽略”两指旋转手势,而不失去两指拖动功能?

感谢您的帮助! 沃特

swift scenekit
1个回答
1
投票

@Wouter:您所描述的听起来像是 SceneKit 中的默认内置功能,您可以在场景视图定义本身上打开或关闭。

sceneView.allowsCameraControl = true/false

它不允许太多自定义(您实际上可以定义名为转盘的旋转行为,以及其他一些行为)。请记住:一旦您移动物体,请立即移动。内部相机对象中的相机被生成,并且视点切换到那个“不可见”相机。 (双击将返回到初始相机及其位置)

如果你想实现自己的机制,你必须与 Pan-Gestures 合作。这是一个很好的演示项目,向您展示了对象旋转时的一些替代方案。考虑一下你看一下:

https://github.com/gadsden/SceneKit-Quaternion-Rotations

© www.soinside.com 2019 - 2024. All rights reserved.