【问题标题】:SceneKit hit test error while moving camera移动相机时 SceneKit 命中测试错误
【发布时间】:2015-06-14 21:09:39
【问题描述】:

我在初始化时这样声明我的相机:

defaultCameraNode.camera = SCNCamera()
defaultCameraNode.position = SCNVector3Make(0, 200, 500)
defaultCameraNode.camera?.zFar = 1000.0
defaultCameraNode.camera?.zNear = 10.0
defaultCameraNode.camera?.xFov = 30.0
defaultCameraNode.camera?.yFov = 30.0
scene.rootNode.addChildNode(defaultCameraNode)
sceneView.pointOfView = defaultCameraNode
defaultCameraNode.constraints = [SCNLookAtConstraint(target: rootNode)]

在这之后,我在一个 tapGesture 块中进行了命中测试:

let hitResults = sceneView.hitTest(sender.locationInView(sceneView), options: nil)

这返回了我想要的,得到了​​节点。 在我添加一个新相机并改变场景的视角之后

var cameraNode = SCNNode()
cameraNode.name = "cameraNode"
cameraNode.position = SCNVector3Make(position.x, position.y + 50.0, position.z + Float(radius * 3))
cameraNode.rotation = SCNVector4Make(1, 0, 0, -atan2f(20.0, 40.0))

var camera = SCNCamera()
camera.zNear = 0.0
camera.zFar = 1000.0
camera.xFov = 40.0
camera.yFov = 40.0
cameraNode.camera = camera    
node.addChildNode(cameraNode)

SCNTransaction.begin()
SCNTransaction.setAnimationDuration(animationDuration)
sceneView.pointOfView = cameraNode
SCNTransaction.commit()

当相机位置改变时,我之前使用的相同命中测试返回一个长度为 0 的数组并在控制台上出现此错误:

SceneKit: error, error in _C3DUnProjectPoints

谁能帮我解决这个问题? 谢谢

【问题讨论】:

    标签: ios swift scenekit hittest scnnode


    【解决方案1】:

    我已经开始了一个新项目,并逐步弄清楚了 hittest 何时会出错。我在 Apple 官方文档中没有找到它,但我的经验如下: 如果要更改相机的位置或任何其他属性,可以通过将新相机添加到具有新位置、参数等的新节点来实现。然后设置 SCNView 的 pointOfView 属性,您可以像这样进行动画处理:

    SCNTransaction.begin()
    SCNTransaction.setAnimationDuration(2.0)
    sceneView.pointOfView = cameraNode
    SCNTransaction.commit()
    

    这里有一点很重要:必须将持有新 SCNCamera 的节点添加到 SCNScene 的 rootView,否则(如果将其添加到 rootView 的 childNode)hittest 将给您一个错误,而不是您触摸的 SCNNode。

    【讨论】:

      【解决方案2】:

      您似乎正在将另一个节点(在该节点上没有附加相机)设置为场景视点。

      查看您的代码。您要附加摄像头节点的节点是cameraNode,您要创建的节点是node(您要添加摄像头节点)。

      【讨论】:

      • 我在帖子中更正了它,这是另一个功能,改变了相机位置,但它是同一个节点。
      猜你喜欢
      • 2020-06-21
      • 2017-03-28
      • 2012-09-17
      • 1970-01-01
      • 2016-02-02
      • 2018-08-19
      • 2015-10-29
      • 2017-03-27
      • 1970-01-01
      相关资源
      最近更新 更多