iOS开发-ARKit

工具

Xcode9

iOS 11

新建工程

iOS开发-ARKit_第1张图片
关键词和关键类

关键词和关键类

关键词:场景视图,场景,几何,节点,渲染器(都是直译过来的,根据类名自行理解)

关键类:ARSCNView 、 SCNScene、 SCNGeometry、 SCNNode 、 SCNMaterial

如何在空间中放一个平面?

创建场景视图ARSCNView,设置代理

创建一个场景SCNScene,给场景视图绑定场景

创建一个平面几何形状SCNPlane (继承于SCNGeometry )

基于几何形状创建一个节点SCNNode

创建一个渲染器SCNMaterial, 用其对平面几何进行渲染

添加节点到场景的根节点中

- (void)viewDidLoad {

    [superviewDidLoad];

    self.sceneView= [[ARSCNViewalloc]initWithFrame:self.view.bounds];

    [self.viewaddSubview:self.sceneView];

    // 1.设置场景视图的代理

    self.sceneView.delegate=self;

    // 是否显示fps 或 timing等信息

    //self.sceneView.showsStatistics = YES;

    //2. 创建场景

    SCNScene*scene = [SCNScenescene];

    //2.1给场景视图绑定场景

    self.sceneView.scene= scene;

    //3.创建一个平面几何图形,高为0.1米,宽为0.1米

    SCNPlane*plane = [SCNPlaneplaneWithWidth:0.1height:0.1];

    plane.cornerRadius=0.05;

    //4.基于几何图形创建节点

    SCNNode*node = [SCNNodenodeWithGeometry:plane];//节点的创建不仅仅是基于平面,根据SCNGeometry头文件里 可见,长方体、圆球、圆锥、圆环、金字塔形 等等都可以创建。有兴趣的可以换着尝试一下。

    //5.创建渲染器

    SCNMaterial*material = [SCNMaterialmaterial];

    UILabel*label = [[UILabelalloc]initWithFrame:CGRectMake(0,0,100,100)];

    label.text=@"123456687900";

    label.backgroundColor= [UIColororangeColor];

    material.diffuse.contents= label;//渲染器可以决定怎样渲染,这个 contents 属性可以设置很多东西,UILabel,                UIImage,甚至 AVPlayer 都可以

    node.position=SCNVector3Make(0,0, -0.3);

    //5.5. 用渲染器对几何图形进行渲染

    plane.materials=@[material];

    //6. 为场景的根节点添加节点

    [scene.rootNodeaddChildNode:node];

}

- (void)viewWillAppear:(BOOL)animated {

    [superviewWillAppear:animated];

    // Create a session configuration

    // ARWorldTrackingConfiguration 可以追踪设备姿态和位置,通过设备的摄像头可以探测到真实世界的表面

    ARWorldTrackingConfiguration*configuration = [ARWorldTrackingConfigurationnew];

    //

    //// Run the view's session

    [self.sceneView.sessionrunWithConfiguration:configuration];

}

- (void)viewWillDisappear:(BOOL)animated {

    [superviewWillDisappear:animated];

    // Pause the view's session

    [self.sceneView.sessionpause];

}

你可能感兴趣的:(iOS开发-ARKit)