更新SceneView的pointOfView position属性后,SceneKit`projectPoint`问题

时间:2019-04-23 14:18:25

标签: scenekit

我有一个循环,其中更新了sceneView的{​​{1}}属性的位置。我很惊讶地看到更新位置之后,pointOfView方法仍然返回相同的值。我想念什么?

projectPoint

1 个答案:

答案 0 :(得分:1)

这些值不会更新,因为您在一次渲染过程中多次设置了sceneView.pointOfView.position。 SceneKit不会应用这些值,这就是projectPoint()总是返回相同值的原因。

如果将两个projectPoint()调用包含在持续时间为零的SCNTransaction块中,则会看到已更改:

SCNTransaction.begin()
SCNTransaction.animationDuration = 0
let pos = SCNVector3(Float(arc4random()), Float(arc4random()), Float(arc4random()))
let a = SCNVector3(3,4,5)
print("Projecting before updating pointOfView position \(scnView.projectPoint(a))")
scnView.pointOfView!.position = pos
SCNTransaction.commit()

SCNTransaction.begin()
SCNTransaction.animationDuration = 0
print("Projecting after updating pointOfView position \(scnView.projectPoint(a))")
SCNTransaction.commit()

但是,这会减慢循环的执行时间,因为SCNTransaction会自动将所有更改应用于演示场景图。我测试时花了两倍的时间。 如果这是一个问题,那么我想您将不得不推出自己的projectPoint()

实现