有一个简短的问题,看看我是否正确使用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 :)函数并测试对象是否在数组中。
谢谢!
答案 0 :(得分:1)
诀窍是确保对所有移动的对象都使用“演示”节点,即使pointOfView正在移动也是如此。
这是我的应用程序在渲染器中的有效代码段:(updateAtTime)
if renderer.isNode(stationaryObjectNode, insideFrustrumOf: renderer.pointOfView!.presentation) == true {
//do stuff if seen
}
如果对象不是固定的,请使用movingObject.presentation
代替stationaryObjectNode