移动AR平台
高级API
支持A9以上设备(不支持模拟器)
Xcode9及以上 iOS 11及以上
移动设备:SE 6S 6SP 7 7SP...
三大特性
追踪
1、全局追踪
2、视觉惯性测距VIO
3、没有外部设备
场景理解
1、平面检测(现实世界的理解)
2、命中测试(动作)
3、光估计
渲染
简单集合
。。。
SceneKit
SpriteKit
Metal
相机捕捉现实世界 ARKit
3D
SceneKit
ARSession
开始 创建项目
ARKit 入门掌握的四大点
1、几何
2、节点
3、渲染
4、手势
//先实例化一个空的SCNScene类
let scene = SCNScene()
1、几何
//创建几何实例,定义一个SCNBox类的几何实例,然后创建盒子,并将其作为根节点的子节点,根节点就是scene
let box = SCNBox(width:0.1,height:0.1,length:0.1,chamferRadius:0)
2、节点
//创建子节点
let boxNode = SCNNode(geometry:box)
//x,y,z轴 -0.2就是前边
boxNode.position = SCNVector3(0,0,-0.2)
//把节点添加到根节点scene上
scene.rootNode.addChildNode(boxNode)
3、渲染
let material = SCNMaterial()//先创建一个渲染器
// material.diffuse.contents = UIColor.red//设置颜色
material.diffuse.contents = UIImage(named:"1.png")//设置图片到节点上
box.materials = [material]//使用这个渲染器渲染
4、手势
registerGestureRe();//调用
func registerGestureRe() {
//创建手势
let tap = UIGestureRecognizer(target:self ,action: #selector(tapPed))
//将手势添加到sceneView上
self.sceneView.addGestureRecognizer(tap)
}
{
//球体 加上手势
let scene = SCNScene()
let sphere = SCNSphere(radius:0.3)//0.3米
let material = SCNMaterial()
material.diffuse.contents = UIImage(named:"1.png")
sphere.materials = [material]
let sphereNode = SCNNode(geometry:sphere)
sphereNode.position = SCNVector3(0,0,-0.5)
scene.rootNode.addChildNode(sphereNode)
sceneView.scene = scene
registerGestureRe();//调用
}
@objc func tapPed(gestureRecognizer:UIGestureRecognizer){
let sceneView = gestureRecognizer.view as!ARSCNView
let touchLocation = gestureRecognizer.location(in: sceneView)
let hitRersults = sceneView.hitTest(touchLocation, options: [:])
//一开始的时候 index = 0
if !hitRersults.isEmpty {
if index == self.textures.count{
index = 0
}
guard let hitRersult = hitRersults.first else {
return
}
let node = hitRersult.node
node.geometry?.firstMaterial?.diffuse.contents =UIImage(named:textures[index])
index += 1
}
OVER!
探索:
除了立方体、球体还有什么形状的图形可以尝试一把呢?
碳原子模型
参考文章:http://www.cocoachina.com/ios/20141113/10205.html
渲染上:视频、 gif
渲染视频:要用到SpriteKit框架中的一个类SKVideoNode,这个类主要用来在2D游戏中渲染视频的,今天我们就借助这个类,实现在3D场景中播放视频
参考:http://www.jianshu.com/p/be06bf357564
//1
let scnView = SCNView(frame: self.view.bounds);
scnView.scene = SCNScene()
self.view.addSubview(scnView);
// 2创建一个摄像机
let cameraNode = SCNNode()
scnView.scene?.rootNode.addChildNode(cameraNode);
//3创建一个节点并绑定一个平面几何对象
let boxNode = SCNNode()
scnView.scene?.rootNode.addChildNode(boxNode);
//4创建一个2D游戏场景和一个播放视频的对象
let url = Bundle.main.url(forResource: "123-pad", withExtension: "mp4")
let videoNode = SKVideoNode(url: url!)
let skScene = SKScene()
skScene.addChild(videoNode)
//5 给平面体设置渲染内容
plane.firstMaterial?.diffuse.contents = skScene
//6 播放视频
videoNode.play()
//7打开摄像头控制查看效果
scnView.allowsCameraControl = true;
渲染 gif:nill😄