scenekit - 如何为 SCNNode 创建边框以指示其在 iOS 11 ARKit-Scenekit 中的选择?

标签 scenekit ios11 arkit xcode9beta6

如何绘制边框以突出显示 SCNNode 并向用户指示该节点已被选中?
在我的项目中,用户可以放置多个虚拟对象,用户可以随时选择任何对象。选择后,我应该向用户显示突出显示的 3D 对象。有没有办法直接实现这一点或在 SCNNode 上画一个边界?

最佳答案

您需要向 sceneView 添加点击手势识别器.

// add a tap gesture recognizer
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
scnView.addGestureRecognizer(tapGesture)

然后,处理水龙头并突出显示节点:
@objc
func handleTap(_ gestureRecognize: UIGestureRecognizer) {
    // retrieve the SCNView
    let scnView = self.view as! SCNView

    // check what nodes are tapped
    let p = gestureRecognize.location(in: scnView)
    let hitResults = scnView.hitTest(p, options: [:])
    // check that we clicked on at least one object
    if hitResults.count > 0 {
        // retrieved the first clicked object
        let result = hitResults[0]

        // get its material
        let material = result.node.geometry!.firstMaterial!

        // highlight it
        SCNTransaction.begin()
        SCNTransaction.animationDuration = 0.5

        // on completion - unhighlight
        SCNTransaction.completionBlock = {
            SCNTransaction.begin()
            SCNTransaction.animationDuration = 0.5

            material.emission.contents = UIColor.black

            SCNTransaction.commit()
        }

        material.emission.contents = UIColor.red

        SCNTransaction.commit()
    }
}

上面的代码片段突出显示了整个节点。如果这是您要找的,您必须调整它以仅突出显示边框。

免责声明:
此代码直接取自在打开新游戏 ( SceneKit ) 项目时创建的 Xcode 模板代码。

关于scenekit - 如何为 SCNNode 创建边框以指示其在 iOS 11 ARKit-Scenekit 中的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46073981/

相关文章:

swift - SceneKit 问题将纹理应用于自定义几何体

3d - 我可以为 SceneKit 使用哪些 3d 建模程序?

iOS SceneKit 灯在模拟器中不工作

ios - 如何释放SKTexture创建的内存

ios - 无法连接到 iOS 11 模拟器上的任何 HTTPS url

iOS 11 安全区域 vs. UIView 动画

ios - Xcode 9 borderColor 在用户定义的运行时属性中不起作用

ios - 如何缩放和定位附加了 SCNSkinner 的 SCNNode?

ios - 此设备不支持提供的配置

json - ARKit 4.0 – 是否可以将 ARWorldMap 数据转换为 JSON 文件?