swift 初探ARKit
时间:2019-10-22
本文章向大家介绍swift 初探ARKit,主要包括swift 初探ARKit使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
参考
https://www.jianshu.com/p/348678918783
隐私权限
https://www.cnblogs.com/shisishao/p/5872178.html
import UIKit import ARKit struct Masks: OptionSet { let rawValue: Int static let ship = Masks(rawValue: 1 << 0) static let bullet = Masks(rawValue: 1 << 1) } class ViewController: UIViewController, ARSCNViewDelegate { var sceneView: ARSCNView! override func viewDidLoad() { super.viewDidLoad() let showHeight : CGFloat = UIScreen.main.bounds.size.height - 100 sceneView = ARSCNView.init(frame: CGRect.init(x: 0, y: 50, width: UIScreen.main.bounds.size.width, height:showHeight)) // 整个场景的大小 self.view.addSubview(sceneView) sceneView.automaticallyUpdatesLighting = true // 启动完成后添加飞船 self.addShip() } func addShip() { let ship = Ship() let x : Double = 0 let y : Double = 0.3 let z : Double = -0.5 ship.position = SCNVector3(x,y,z) self.sceneView.scene.rootNode.addChildNode(ship) //球形 let bullet = Bullet() let x1 : Double = 0.1 let y1 : Double = 0 let z1 : Double = -0.2 bullet.position = SCNVector3(x1,y1,z1) self.sceneView.scene.rootNode.addChildNode(bullet) // 有.scn 类型的资源就更方便了。 // Create a new scene // let scene = SCNScene(named: "art.scnassets/ship.scn")! } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) let configuration = ARWorldTrackingConfiguration() // Run the view's session sceneView.session.run(configuration) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) // Pause the view's session sceneView.session.pause() } } // 飞船类 class Ship: SCNNode { override init() { super.init() //正方体 let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0) self.geometry = box let shape = SCNPhysicsShape(geometry: box) self.physicsBody = SCNPhysicsBody(type: .dynamic, shape: shape) self.physicsBody?.isAffectedByGravity = false self.physicsBody?.categoryBitMask = Masks.ship.rawValue self.physicsBody?.contactTestBitMask = Masks.bullet.rawValue let material = SCNMaterial() material.diffuse.contents = UIImage.init(named: "battle") self.geometry?.materials = [material,material,material,material,material,material] } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } // 子弹类: class Bullet: SCNNode { override init() { super.init() // 形状:球体 let sphere = SCNSphere(radius: 0.025) self.geometry = sphere // 物理实体 let shape = SCNPhysicsShape(geometry: sphere) self.physicsBody = SCNPhysicsBody(type: .dynamic, shape: shape) self.physicsBody?.isAffectedByGravity = false // 不受引力影响 self.physicsBody?.categoryBitMask = Masks.bullet.rawValue // 自身是识别码 self.physicsBody?.contactTestBitMask = Masks.ship.rawValue // 碰撞的掩码 // 添加节点的图片 let material = SCNMaterial() material.diffuse.contents = UIImage.init(named: "sanlian") self.geometry?.materials = [material] } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } }
原文地址:https://www.cnblogs.com/qingzZ/p/11718918.html
- Go语言实现冒泡和快速排序
- 利用Meta申明来做百度、谷歌、雅虎、微软等搜索的开放适配
- 【Oracle 12c ASM专题】——我的第一个Flex Diskgroup
- 编写一个go gRPC的服务
- GO语言使用gopsutil包进行机器信息采集
- redigo 连接池代码分析
- golang文件传输服务
- golang使用信号量热更新
- SEO养博客神器:同步文章(或摘要)到新浪博客的WordPress插件
- go如何读取MAC地址或硬盘ID
- SEO分享:让百度删除不想收录的域名或快照的最快方法
- MySQL中server_id一致带来的问题
- SQL复习之使用SQL语句创建数据库
- GO语言的IO方法实例小结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- spark shell 配置 Kryo 序列化
- Mac里捣腾Kerberos(一)
- Spark on K8S 访问 Kerberized HDFS
- Apache Beam的Docker Demo
- docker login 报错了...
- Spark-Submit 和 K8S Operation For Spark
- Spark的Dockerfile分析
- Spark on Kubernetes在Mac的Demo
- Python的Wand模块
- 机器学习第4天:预测1立方米混凝土抗压强度
- 硬件笔记之GP106-90 3GB GTX1060 3GB魔改
- Java BigDecimal 的舍入模式(RoundingMode)详解
- 实际工程中加快 Java 代码编写的小提示
- CentOS7 离线安装软件并准备依赖包
- CentOS7 SkyWalking APM8.1.0 搭建与项目集成使用