使用isNode(_:insideFrustumOf :)与nodesInsideFrustum(of :)时的结果不同

时间:2018-10-01 16:49:14

标签: ios arkit

有一个简短的问题,看看我是否正确使用isNode(_:insideFrustumOf :)。

我正在将节点(SCNNode)放入具有标准配置的ARSCNView中。节点中的几何形状偏离中心,因此我使用了节点的支点属性来调整其中心点。

let c = object.boundingSphere.center            
object.pivot = SCNMatrix4MakeTranslation(c.x, c.y, c.z)
object.position = c

我使用捏手势更新对象的比例或旋转后出现问题。发生这种情况之后,我从isNode(_:insideFrustumOf :)和nodesInsideFrustum(of :)得到了不同的结果。

我正在测试的节点在屏幕上清晰可见,但是isNode(_:insideFrustumOf :)无法看到它。但是,该节点位于nodesInsideFrustum(of :)的[SCNNode]结果中。

我的问题是这是否是错误,或者是否存在其他将几何体居中到节点的正确方法,可以解决此问题。现在,我将使用nodesInsideFrustum(of :)函数并测试对象是否在数组中。

谢谢!

1 个答案:

答案 0 :(得分:1)

诀窍是确保对所有移动的对象都使用“演示”节点,即使pointOfView正在移动也是如此。

这是我的应用程序在渲染器中的有效代码段:(updateAtTime)

if renderer.isNode(stationaryObjectNode, insideFrustrumOf: renderer.pointOfView!.presentation) == true {
    //do stuff if seen
}

如果对象不是固定的,请使用movingObject.presentation代替stationaryObjectNode