iOS ARKit 显示引导示图、添加正方体
ARKit 概述
2017年,在 WWDC(World Wide Developers Conference,苹果全球开发者大会)上,苹果公司了增强现实开发套件ARKit。ARKit 一推出即在科技圈引发极大关注,一方面是苹果公司在科技影响力,另一方面更重要的是 ARKit 在秘动端实现的堪称惊艳的 AR效果。ARKit 的面世,直接术带到了亿万用户眼前,更新了人们对AR的印象,苹果公司也因此成为移动 AR技术的引领者。
什么是 ARKit
如此神奇,那么什么是 ARKit?苹果公司官方对 ARKit 的描述是:通过整合设备摄像头图修备运动传感器(包括 LiDAR)信息,在应用中提供AR 体验的开发套件。对开发人员而言,更通俗ARKit 是一种用于开发 AR应用的 SDK(Software Development Kit,软件开发工具包)。
从本质上讲,AR 是将 2D 或者3D元素(文字、图片、模型、音视频等)放置于设备摄像头所采集的图像中,营造一种虚拟元素真实存在于现实世界中的假象。ARKit 整合了设备运动跟踪、摄像头图像视觉处理、场景渲染等技术,提供了简单易用的 API(Application Programming Interface,应用程方便开发人员开发 AR 应用,开发人员不需要再关注底层的技术实现细节,从而大大降低了 AR」难度。
ARKit 功能
从技术层面讲,ARKit 通过整合 AVFoundation、CoreMotion、CoreML, 3个框架,在这基础上融合扩展成,如图1-6所示。其中,AVFoundation 是处理基于时间的多媒体数据框架,CoreMotion 是处理加速度、陀螺仪、LiDAR 等传感数据信息框架,CoreML.则是机器学习框架。ARKit 融合来自 AVFoundation 的频图像信息与来自 CoreMotion 的设备运动传感数据,再借助于CoreMI.计算机图像处理与机器学习技提供给开发者稳定的三维数字环境。
ARKit初体验--显示引导示图、添加小正方体

添加引导示图 ARCoachingOverlayView
func addCoaching() {
let coachingOverlay = ARCoachingOverlayView()
coachingOverlay.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addSubview(coachingOverlay)
coachingOverlay.goal = .horizontalPlane
coachingOverlay.session = self.session
coachingOverlay.delegate = self
}
添加小正方体
@objc func placeBox(){
let boxMesh = MeshResource.generateBox(size: 0.15)
var boxMaterial = SimpleMaterial(color:.white,isMetallic: false)
let planeAnchor = AnchorEntity(plane:.horizontal)
do {
boxMaterial.color = try SimpleMaterial.BaseColor(tint:UIColor.yellow.withAlphaComponent(0.9999), texture: MaterialParameters.Texture(TextureResource.load(named: "Box_Texture.jpg")))
let boxEntity = ModelEntity(mesh:boxMesh,materials:[boxMaterial])
planeAnchor.addChild(boxEntity)
self.scene.addAnchor(planeAnchor)
} catch {
print("找不到文件")
}
}
完整代码
import SwiftUI
import RealityKit
import ARKit
import Combine
struct ARCoachingView : View {
var body: some View {
return ARViewContainer1().edgesIgnoringSafeArea(.all)
}
}
struct ARViewContainer1: UIViewRepresentable {
func makeUIView(context: Context) -> ARView {
let arView = ARView(frame: .zero)
let config = ARWorldTrackingConfiguration()
config.planeDetection = .horizontal
arView.session.run(config, options:[ ])
arView.addCoaching()
return arView
}
func updateUIView(_ uiView: ARView, context: Context) {
}
}
extension ARView: ARCoachingOverlayViewDelegate{
func addCoaching() {
let coachingOverlay = ARCoachingOverlayView()
coachingOverlay.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addSubview(coachingOverlay)
coachingOverlay.goal = .horizontalPlane
coachingOverlay.session = self.session
coachingOverlay.delegate = self
}
public func coachingOverlayViewWillActivate(_ coachingOverlayView: ARCoachingOverlayView) {
self.placeBox()
}
@objc func placeBox(){
let boxMesh = MeshResource.generateBox(size: 0.15)
var boxMaterial = SimpleMaterial(color:.white,isMetallic: false)
let planeAnchor = AnchorEntity(plane:.horizontal)
do {
boxMaterial.color = try SimpleMaterial.BaseColor(tint:UIColor.yellow.withAlphaComponent(0.9999), texture: MaterialParameters.Texture(TextureResource.load(named: "Box_Texture.jpg")))
let boxEntity = ModelEntity(mesh:boxMesh,materials:[boxMaterial])
planeAnchor.addChild(boxEntity)
self.scene.addAnchor(planeAnchor)
} catch {
print("找不到文件")
}
}
}

浙公网安备 33010602011771号