【发布时间】:2017-07-02 13:17:43
【问题描述】:
我找不到最近且不在目标 c 中的答案。我快速使用 SceneKit 并尝试将我的角色节点移动到用户单击的位置。我已经尝试在触摸开始时使用命中结果,但我的地板节点位于 (0, 0, 0) 处,因此当它击中大部分时间用户点击屏幕时它是无用的。我正要拿出我的旧微积分书,但后来我意识到当触摸位置总是相对于在场景中移动的屏幕位置时,我不知道如何转换。如果有人可以给我一个链接或提供一些建议,我将不胜感激。
【问题讨论】:
我找不到最近且不在目标 c 中的答案。我快速使用 SceneKit 并尝试将我的角色节点移动到用户单击的位置。我已经尝试在触摸开始时使用命中结果,但我的地板节点位于 (0, 0, 0) 处,因此当它击中大部分时间用户点击屏幕时它是无用的。我正要拿出我的旧微积分书,但后来我意识到当触摸位置总是相对于在场景中移动的屏幕位置时,我不知道如何转换。如果有人可以给我一个链接或提供一些建议,我将不胜感激。
【问题讨论】:
要在视图坐标和场景坐标之间进行转换,您可以使用场景渲染器的 projectPoint 和 unprojectPoint 方法,请参阅https://developer.apple.com/reference/scenekit/scnscenerenderer 的文档
它们可以让您在场景的 3D 坐标系和它所显示的视图的 2D 坐标系之间转换点。
更新
您要做的是调用 unproject 函数两次,一次将 z 设置为零(使用 x/y 视图坐标),一次将其设置为 1。这将在 3d 世界中为您提供 2 个点,想象它们之间有一条线,您需要计算出该线与您的平面相交的位置。这将是您需要的重点。
【讨论】: