【问题标题】:Different results when using isNode(_:insideFrustumOf:) vs nodesInsideFrustum(of:)使用 isNode(_:insideFrustumOf:) 与 nodesInsideFrustum(of:) 时的不同结果
【发布时间】:2020-03-03 21:43:47
【问题描述】:

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

我将一个节点 (SCNNode) 放入具有标准配置的 ARSCNView 中。节点中的几何图形是偏离中心的,所以我使用节点的 pivot 属性来调整它的中心点。

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:) 函数并测试对象是否在数组中。

谢谢!

【问题讨论】:

  • 你能找到解决问题的方法吗?

标签: ios arkit


【解决方案1】:

诀窍是确保您对任何移动对象使用“表示”节点,即使是 pointOfView(如果它正在移动)。

这是我的应用程序在渲染器中的工作 sn-p:(updateAtTime)

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

如果您的对象不是静止的,请使用movingObject.presentation 而不是stationaryObjectNode

【讨论】:

  • 很好,我会试一试。感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
  • 2014-11-23
  • 2021-06-17
  • 1970-01-01
  • 2015-01-19
  • 2011-04-27
相关资源
最近更新 更多