当前位置:   article > 正文

Reality Composer使用+QuickLook初探

reality composer

 Reality Composer

苹果公司为了填补在3D建模这一块的空白,给我们提供了这样一个强大的3D建模工具——Reality  Composer,接下来就让我们研究一下如何使用这件工具。

官网介绍:https://developer.apple.com/documentation/realitykit/creating-3d-content-with-reality-composer

step1——打开方式:xcode中按如下方式打开,新建

step2—— 选择场景

在这里选择你所需要的大场景,相当于RealityKit中的AnchorEntity,在这里共有五种选择,水平面、垂直面、图像、人脸、物体,也就是说可以把虚拟物体定位到这五种真实世界的对象中。 

step3——编辑

这里我们就选择官网提供的一个机器人模型来进行reality composer的编辑。

素材地址:https://developer.apple.com/augmented-reality/quick-look/

这次我们就选择最常用的水平面进去,首先映入眼帘的是一个正方体,一个文本,通过触摸板或鼠标操控可以控制移动和旋转,网格即为水平面。

 在上方可以选择添加新的物体,点击物体可以在右侧属性板调整属性,也可以对多个物体进行成组操作,类似于把几个物体捆绑在一起,可以赋予相同行为。

step4-添加模型

将下载好的机器人模型直接拖入,点击空白处右侧属性板显示的则是大场景(相当于AnchorEntity)的属性,名字最好设为英文,点击机器人显示的则是模型(相当于ModelEntity)的属性

step5-添加行为

点击右上角行为,选择机器人,选择轻点与翻转即可为机器人添加一个翻转行为,可以选择受影响的对象和操作序列,操作序列就是可以添加多个行为,将不同的行为拉到一起即可让这些行为同时进行,如果想要model有碰撞效果,点击模型,在属性面板中参与物理行为,选择不同的材质即会有不同的碰撞效果。

为了达到该文章的项目需求,我们可以设置成如下行为,场景开始时隐藏机器人,设置触发器为通知,即用代码来添加触发器(需设置一个标识符),触发后实现机器人从远处走到原点处,动画使用的是下载时自带的usdz文件的动画,我们可以将迭代设置为2,让动画执行时间延长。 

 step6-添加文本标志

在平面中添加一个文本,若能看到文本说明已经检测到平面,这时候就配置完成可以保存文件了。

 step7-新建项目文件

xcode新建一个AR项目,将AR模版拖入xcode,写入以下代码,除了label的设置以外就只剩一点点代码了,仔细看看会发现很简单。

  1. //
  2. // ViewController.swift
  3. // RealityComposer
  4. //
  5. // Created by mac on 2022/10/24.
  6. //
  7. import UIKit
  8. import RealityKit
  9. class ViewController: UIViewController {
  10. @IBOutlet var arView: ARView!
  11. var robotWalk: AR.RobotWalk!//由于viewDidload以外也要使用,所以设为全局变量
  12. //添加一个可点击的label,点击召唤机器人
  13. lazy var startLabel:UILabel = {
  14. let startLabel = UILabel()
  15. startLabel.translatesAutoresizingMaskIntoConstraints = false
  16. startLabel.textAlignment = .center
  17. startLabel.text = "点击召唤机器人"
  18. startLabel.textColor = .yellow
  19. startLabel.font = .systemFont(ofSize: 24,weight: .heavy)
  20. return startLabel
  21. }()
  22. override func viewDidLoad() {
  23. super.viewDidLoad()
  24. //给label设置手势
  25. let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(tap:)))
  26. view.addSubview(startLabel)
  27. startLabel.isUserInteractionEnabled = true
  28. startLabel.addGestureRecognizer(tap)
  29. //设置label的约束
  30. startLabel.topAnchor.constraint(equalTo: view.topAnchor, constant: 70).isActive = true
  31. startLabel.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 100).isActive = true
  32. startLabel.widthAnchor.constraint(equalToConstant: 200).isActive = true
  33. //robotWalk就相当于AnchorEntity,自带的load函数后面的RobotWalk是自己取的场景名,将场景加载出来
  34. //可以进入AR的定义文件中查看
  35. robotWalk = try! AR.loadRobotWalk()
  36. //将场景放入arView
  37. arView.scene.addAnchor(robotWalk)
  38. }
  39. //设置点击事件
  40. @objc func handleTap(tap:UITapGestureRecognizer){
  41. //调用大场景中的notifications,walkstart即为定义的标识符,调用他的post即可触发行为
  42. if tap.state == .ended{
  43. //walkStart被实例成NotificationTrigger,其中有一个post方法发送指令,调用即可触发行为
  44. robotWalk.notifications.walkStart.post()
  45. }
  46. }
  47. }

step8-项目中修改

如果对于物体的属性还需要调整可以直接在xcode中打开文件,修改后代码也会实时更新。

step9-项目演示 

RealityComposer项目演示

QuickLook

QuickLook是ios的一个AR集成框架,当app的主要功能不是AR时可以使用QuickLook实现一个简要的AR预览。

官网介绍:https://developer.apple.com/documentation/quicklook

https://developer.apple.com/documentation/arkit/previewing_a_model_with_ar_quick_look

首先可以在Reality Composer中创建一个模型(不包含子节点),导出成reality或usdz格式放入xcode中,接着实现以下代码(在xcode中我放入的模型名叫house)即可生成一个简易的AR模型预览功能。

  1. import UIKit
  2. import ARKit
  3. import QuickLook
  4. class ViewController: UIViewController, QLPreviewControllerDataSource {
  5. override func viewDidAppear(_ animated: Bool) {
  6. super.viewDidAppear(animated)
  7. let previewController = QLPreviewController()
  8. previewController.dataSource = self
  9. present(previewController, animated: true, completion: nil)
  10. }
  11. func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
  12. return 1
  13. }
  14. func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
  15. let url = Bundle.main.url(forResource: "house", withExtension: "usdz")!
  16. return url as QLPreviewItem
  17. }
  18. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/436222
推荐阅读
相关标签
  

闽ICP备14008679号