iOS开发-ARKit
工具
Xcode9
iOS 11
新建工程
关键词和关键类
关键词和关键类
关键词:场景视图,场景,几何,节点,渲染器(都是直译过来的,根据类名自行理解)
关键类: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];
}