首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ARAnchor中显示“ARSCNView”

在ARAnchor中显示“ARSCNView”
EN

Stack Overflow用户
提问于 2018-09-05 15:53:17
回答 2查看 1.1K关注 0票数 3

在ARKit中,我们可以通过.showFeaturePoints Type属性可视化在ARSession中检测到的.showFeaturePoints

代码语言:javascript
复制
self.sceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints]

此外,我们还可以显示一个坐标轴可视化,显示AR世界坐标系的位置和方向:

代码语言:javascript
复制
static let showWorldOrigin: SCNDebugOptions

但是,是否可以在ARAnchors中显示ARSCNView呢?

如果,我们怎么能做到呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-05 23:55:35

只是为了跟进@sj-r和@Rickster的评论。

@Rickster谈到的关于coordinateOrigin.scn的示例代码在这里找到:创建基于面子的体验

下面是我以前用来可视化Axis的一个小片段:

代码语言:javascript
复制
class BMOriginVisualizer: SCNNode {

    //----------------------
    //MARK: - Initialization
    //---------------------

    /// Creates An AxisNode To Vizualize ARAnchors
    ///
    /// - Parameter scale: CGFloat
    init(scale: CGFloat = 1) {

        super.init()

        //1. Create The X Axis
        let xNode = SCNNode()
        let xNodeGeometry = SCNBox(width: 1, height: 0.01, length: 0.01, chamferRadius: 0)
        xNode.geometry = xNodeGeometry
        xNodeGeometry.firstMaterial?.diffuse.contents = UIColor.red
        xNode.position = SCNVector3(0.5, 0, 0)
        self.addChildNode(xNode)

        //2. Create The Y Axis
        let yNode = SCNNode()
        let yNodeGeometry = SCNBox(width: 0.01, height: 1, length: 0.01, chamferRadius: 0)
        yNode.geometry = yNodeGeometry
        yNode.position = SCNVector3(0, 0.5, 0)
        yNodeGeometry.firstMaterial?.diffuse.contents = UIColor.green
        self.addChildNode(yNode)

        //3. Create The Z Axis
        let zNode = SCNNode()
        let zNodeGeometry = SCNBox(width: 0.01, height: 0.01, length: 1, chamferRadius: 0)
        zNode.geometry = zNodeGeometry
        zNodeGeometry.firstMaterial?.diffuse.contents = UIColor.blue
        zNode.position = SCNVector3(0, 0, 0.5)
        self.addChildNode(zNode)

        //4. Scale Our Axis
        self.scale = SCNVector3(scale, scale, scale)

    }


    required init?(coder aDecoder: NSCoder) { fatalError("Vizualizer Coder Not Implemented") }
}

可以像这样初始化如下:

代码语言:javascript
复制
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {

        let anchorVizualizer = BMOriginVisualizer(scale: 0.5)
        node.addChildNode(anchorVizualizer)

}

希望这将作为对@sj-r提供的答案的扩展提供有用的帮助。

票数 5
EN

Stack Overflow用户

发布于 2018-09-05 16:15:42

ARAnchor只代表“位置和方向”。您可以看到的是SCNNodes。

您可以通过ARSCNViewDelegate中的方法为添加的每个锚点附加一个节点。

代码语言:javascript
复制
func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
    //create a node so you can visualize the location.
    let sphereNode = SCNNode(geometry: SCNSphere(radius: 0.5))
    sphereNode.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
    return sphereNode
}

这是在添加锚后(或者当系统添加锚点时,例如在平面检测或图像/对象检测打开时)调用的。

代码语言:javascript
复制
sceneView.session.add(anchor:)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52189189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档