【问题标题】:ARKit floating planesARKit 浮动飞机
【发布时间】:2017-12-29 14:35:17
【问题描述】:

有时ARKit 在现有平面上创建平面。它不会合并它们。我正在封闭空间中使用 iPhone 7 测试ARKit。放置在该平面上的物体似乎漂浮在太空中。这种情况并不经常发生,我也无法一直重现。有人能告诉我如何防止出现重叠和浮动飞机吗?或者如何在底平面上放置 3D 物体?

这是绘制平面的代码。

func createPlaneNode(center: vector_float3, extent: vector_float3) -> SCNNode {
    let plane = SCNPlane(width: CGFloat(extent.x), height: CGFloat(extent.z))

    let planeMaterial = SCNMaterial()
    planeMaterial.diffuse.contents = UIColor.blue.withAlphaComponent(0.4)
    plane.materials = [planeMaterial]
    let planeNode = SCNNode(geometry: plane)
    planeNode.position = SCNVector3Make(center.x, 0, center.z)
    planeNode.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)

    return planeNode
}

func createPlaneNode(center: vector_float3, extent: vector_float3) -> SCNNode {
    let plane = SCNPlane(width: CGFloat(extent.x), height: CGFloat(extent.z))

    let planeMaterial = SCNMaterial()
    planeMaterial.diffuse.contents = UIColor.blue.withAlphaComponent(0.4)
    plane.materials = [planeMaterial]
    let planeNode = SCNNode(geometry: plane)
    planeNode.position = SCNVector3Make(center.x, 0, center.z)
    planeNode.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)

    return planeNode
}

func updatePlaneNode(_ node: SCNNode, center: vector_float3, extent: vector_float3) {
    let geometry = node.geometry as! SCNPlane

    geometry.width = CGFloat(extent.x)
    geometry.height = CGFloat(extent.z)
    node.position = SCNVector3Make(center.x, 0, center.z)
}

【问题讨论】:

    标签: ios swift arkit


    【解决方案1】:

    我认为您不能阻止 ARKit 生成重叠平面,因为该部分几乎是一个黑匣子。但是,我想到了两种可能来处理这种情况。

    1) 找到第一个平面后停止跟踪,并在场景中插入一个无限平面。您可以为此目的使用SCNFloor,或者只是一个具有巨大范围的普通平面。当然,这只有在场景中需要一个平面时才可用。

    2) 每隔一段时间(可能在委托方法 renderer(_: SCNSceneRenderer, didUpdate: SCNNode, for: ARAnchor)renderer(_: SCNSceneRenderer, didAdd: SCNNode, for: ARAnchor) 中),通过将这些平面投影到 xz 平面上手动检查场景中的平面是否重叠,进行 2D 碰撞测试并移除如果重叠部分高于某个阈值,则使用其中任何一个。您还可以检查它们之间的 3D 距离是否低于阈值来确定这一点。

    【讨论】:

    • 如何用检测到的平面锚点制作无限平面?
    猜你喜欢
    • 2021-01-31
    • 1970-01-01
    • 2018-02-22
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多