首页 > 其他分享 >iOS ARKit 显示引导示图、添加正方体

iOS ARKit 显示引导示图、添加正方体

时间:2024-01-15 15:34:12浏览次数:29  
标签:正方体 self iOS coachingOverlay ARKit AR let func

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("找不到文件")
        }
    }
    
}

 

标签:正方体,self,iOS,coachingOverlay,ARKit,AR,let,func
From: https://www.cnblogs.com/duzhaoquan/p/17965468

相关文章

  • ios如何连接代理?
    1.打开设置,点击无线局限网。2.打开无限局域网开关,连接WIFI,点击已连接WIFI的右侧小图标。3.点击配置代理界面,选择“手动”。4.点开辅助工具,复制局域网的代理地址、端口,填入服务器、端口的输入框中,并打开认证开关。5.填写【用户名、密码】在对应的输入框,点击存储。6.......
  • Vue 3 + TypeScript + Vite + Element-Plus + Router + Axios + Pinia项目搭建(内含完
    Vue3+TypeScript+Vite+Element-Plus+Router+Axios+Pinia项目搭建(内含完整架构)安装Vue3+ts+vitenpminitvite@latest选择y,新建项目名称,选择vue,选择vue-ts下载完成后执行以下命令行cd新建的项目名称npminpmrundev安装Element-Plusnpminstallelement-plus-......
  • 启用DoH(DNS-over HTTPS)在Windows、Android、IOS平台
    做个备忘录,记录下主力设备Win11、安卓、IOS、路由器、浏览器配置DoH(DNS-overHTTPS)的过程Windows11设置-网络和Internet-WLAN-硬件属性-DNS服务器分配Win11原生支持的DoH服务:IPv4Google:8.8.8.8and8.8.4.4Cloudflare:1.1.1.1and1.0.0.1Quad9:9.9.9.9and149.112......
  • 如何屏蔽苹果iOS 17软件自动更新,去除更新通知和标记
    亲爱的小伙伴们大家好!我是咕噜铁蛋!,你是否经常被iOS系统的更新提示所困扰?每次看到那个小红点或者数字提示,心里总是纠结万分。更新吧,怕新系统不如旧系统稳定;不更新吧,那个小红点或数字总是如影随形,让人心烦。今天,我将为你详细解读如何屏蔽iOS17的软件自动更新,让你从此远离更新烦......
  • axios发送get、post请求
    1.环境安装//nodejs环境//npminstallaxios2.axios发送get请求constaxios=require('axios')consturl="xxx.xxx.xxx";constheaders={}axios.get(url,{headers}).then(function(response){console.log(response.data)r......
  • XCODE IOS 静态链接库替换升级
    XCODE 版本15.2. 一个很久需求没更新的IOS应用,近来有新需求要开发。拉下代码运行,出现了个BAD_ACCESS错误。出错的位置位于一个调用的第三方的.a静态库内部。因为调用代码并没有修改,很容易想到可能XCODE相关升级,导致的问题。由于是第三方的一个.a动态库,兼容问题,......
  • 超微主板升级BMC和BIOS固件方法
    Netgate1541是Netgate公司2018年推出的一台1U防火墙设备,采用八核IntelXeon®CPUD1541,千兆和万兆端口各两个,并可扩展网络接口,能实现高达18.8Gbps的路由性能。Netgate1541防火墙实际上使用的是超微SYS-5018D-FN4T平台。2019年自行购入一台,稳定运行至今。考虑系统BMC和BIOS还是......
  • ios开发中:当一个 viewcontroller 中嵌套了一个 viewcontroller.view,pushViewcontrolle
    在iOS开发中,当你在一个UIViewController中嵌套另一个UIViewController的视图时,即使嵌套的视图能够正确显示,该嵌套的UIViewController实例可能不会被完全加入到视图控制器层次结构中。这可能导致一些问题,比如无法使用pushViewController:animated:方法进行导航。原因这种......
  • 机甲战队国服无限金币ios版本
    机甲战队国服无限金币ios版本机甲战队国服无限金币ios版本机甲战队国服无限金币ios版本机甲战队国服无限金币ios版本机甲战队国服无限金币ios版本免费,专业刷金,进战队战队!!!!!!!!三天稳定1000金币,氪金党勿入,肝佬欢迎进入,目前国服金价一月免费肝1万金币,一起开黑刷金请进qq群947633......
  • Xcode14.3.1真机调试iOS17的方法
    Hello,大家好我是咕噜铁蛋!Xcode是苹果官方开发工具,它提供了完整的开发环境和工具集,支持开发iOS、macOS、watchOS和tvOS应用程序。对于iOS开发者来说,Xcode是必备的工具之一。而随着iOS系统的不断更新和升级,Xcode也在不断地升级和改进,确保最好的开发体验。今天铁蛋将介绍如......