美文网首页ARKITARKIT+SCENEKITAR
ARKit初体验--探测平地

ARKit初体验--探测平地

作者: 以霏之名 | 来源:发表于2017-06-16 20:49 被阅读738次

    首先,配置文件设置成水平平地,目前暂时只支持水平的,垂直的貌似还不支持,期待正式版。

    configuration.planeDetection = .horizontal
    

    捕到平地后,通过代理拿到当前平地的信息,代码如下:

    //添加节点时候调用(当开启平地捕捉模式之后,如果捕捉到平地,ARKit会自动添加一个平地节点)
        func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
            if anchor.isMember(of: ARPlaneAnchor.self){
                //通过anchor建一个SCNPlane向量
                myPlane = plane(anchor: anchor as! ARPlaneAnchor)
                //加入到平地node里
                node.addChildNode(myPlane)
            }
        }
    

    在这里,捕获到平地后,返回2个数据:
    SCNNode:当前平地的node.
    ARAnchor:平地的向量坐标,该向量虽然是vector_float3类型,其实只是(X,Z)的二维平面,Y轴一直为0,需要注意的是平地探测会不断变化,所以下面这几个值会一直变化,有几个很重要的属性:
    center:平地向量的中心点。
    extent:vector_float3向量,其中Y为0.

    image.png

    在平地被探测的时候,添加一个SCNPlane。

    //根据平地向量的长度,宽度,初始化一个平面形状
    self.planeGeometry = SCNPlane.init(width: CGFloat(self.anchor.extent.x), height: CGFloat(self.anchor.extent.z))
    //通过平面形状初始化一个SCNNode
    let planeNode:SCNNode = SCNNode.init(geometry: self.planeGeometry)
    //把中心点设置在平面的中心
     planeNode.position = SCNVector3Make(anchor.center.x, 0, anchor.center.z)
    //SCNPlane是位于(X,Y)轴的,需要旋转到(X,Z) 轴
    planeNode.transform = SCNMatrix4MakeRotation(-.pi/2, 1.0, 0, 0)
    //添加到平地的Node上
    self.addChildNode(planeNode)
    

    需要注意的是,平地探测会一直变化,所以我们需要持续监听,更改平面的宽高和中心点:

    func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
            //更改宽
            self.planeGeometry.width = CGFloat(anchor.extent.x);
            //更改高
            self.planeGeometry.height = CGFloat(anchor.extent.z);
            //更改中心点
            self.position = SCNVector3Make(anchor.center.x, 0, anchor.center.z);
            //由于渲染了纹理,需要拉伸纹理。
            self.setTextureScale();
        }
    

    水平有限,欢迎大家提出意见:
    demo地址

    相关文章

      网友评论

      • 那样风采:平地捕获貌似不行啊,是因为不灵敏吗?我运行你的demo貌似没成功过。自己写的demo也是同样的问题?

      本文标题:ARKit初体验--探测平地

      本文链接:https://www.haomeiwen.com/subject/wjodqxtx.html