ARKit - 第一个AR项目

2017-09-02  本文已影响0人  Onlyoner

移动AR平台
高级API
支持A9以上设备(不支持模拟器)
Xcode9及以上 iOS 11及以上
移动设备:SE 6S 6SP 7 7SP...

三大特性

追踪

1、全局追踪
2、视觉惯性测距VIO
3、没有外部设备

场景理解

1、平面检测(现实世界的理解)
2、命中测试(动作)
3、光估计

渲染

简单集合
。。。
SceneKit
SpriteKit
Metal

相机捕捉现实世界 ARKit
3D
SceneKit


QQ截图20170901210224.png

ARSession


QQ截图20170901210720.png
QQ截图20170901210840.png

开始 创建项目

QQ20170901-232414@2x.png
QQ20170901-232540@2x.png

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😄

上一篇下一篇

猜你喜欢

热点阅读