visionOS空間計算實戰開發教程Day 4 初識ImmersiveSpace

細心的讀者會發現在在??Day1???和??Day2???的示例中我們使用的都是??WindowGroup??。

@main
struct visionOSDemoApp: App {var body: some Scene {WindowGroup {ContentView()}}
}

本節我們來認識在visionOS開發中會經常用到的另一個概念??ImmersiveSpace??。

沉浸式空間為內容提供了一個無界的區域,可在空間內控制內容的大小和擺放位置。在獲取用戶的授權后,我們還可以使用開啟了沉浸空間的ARKit來將內容集成到周遭環境中。例如,可以使用ARKit場景重建來獲取家具的網格(mesh)及其附近的對象,讓內容可以與網格進行交互。

visionOS空間計算實戰開發教程Day 4 初識ImmersiveSpace

首先我們需要創建一個??ViewModel.swift??文件用于進行內容的相關配置。

import SwiftUI
import RealityKit
import ARKit@MainActor class ViewModel: ObservableObject {private let session = ARKitSession()private let worldTracking = WorldTrackingProvider()private var contentEntity = Entity()func setupContentEntity() -> Entity {let box = ModelEntity(mesh: .generateBox(width: 0.5, height: 0.5, depth: 0.5))contentEntity.addChild(box)return contentEntity}func runSession() async {print("WorldTrackingProvider.isSupported: \(WorldTrackingProvider.isSupported)")print("PlaneDetectionProvider.isSupported: \(PlaneDetectionProvider.isSupported)")print("SceneReconstructionProvider.isSupported: \(SceneReconstructionProvider.isSupported)")print("HandTrackingProvider.isSupported: \(HandTrackingProvider.isSupported)")Task {let authorizationResult = await session.requestAuthorization(for: [.worldSensing])for (authorizationType, authorizationStatus) in authorizationResult {print("Authorization status for \(authorizationType): \(authorizationStatus)")switch authorizationStatus {case .allowed:breakcase .denied:// TODObreakcase .notDetermined:break@unknown default:break}}}Task {try await session.run([worldTracking])for await update in worldTracking.anchorUpdates {switch update.event {case .added, .updated:print("Anchor position updated.")case .removed:print("Anchor position now unknown.")}}}}
}

在??setupContentEntity???方法中,我們通過??ModelEntity???創建了一個模型實體,其中對??mesh???參數使用??MeshResource.generateBox??創建了一個立方體,可使用參數的說明如下:

  • mesh: 定義模型幾何形狀的網格。
  • materials: 定義模型外觀的材質資源。
  • collisionShape: 定義合成碰撞開關的形狀資源集合。
  • mass: 按公斤計的模型質量。

另一個異步方法??runSession???用于進行配置和授權的處理,其中包含兩個??Task??。

通常我們會創建一個??ImmersiveView??來顯示沉浸空間的效果,但本例我們都放到了入口文件中:

import SwiftUI
import RealityKit@main
struct visionOSDemoApp: App {@StateObject var model = ViewModel()var body: some SwiftUI.Scene {ImmersiveSpace {RealityView { content incontent.add(model.setupContentEntity())}.task{await model.runSession()}}}
}

注意因為這里導入了??RealityKit???,所以為避免歧義我們使用了??SwiftUI.Scene???,然后在主體內容中是一個??RealityView???,其中添加了我們在??ViewModel???中所創建的立方體,同時使用異步任務去執行授權部分的??runSession()??方法。

代碼部分就是這么多,但在運行應用前我們還要配置一下??Info.plist???文件,我們需要將??Preferred Default Scene Session Role???選項修改為??Immersive Space Application Session Role??:

Immersive Space Application Session Role

這時運行應用就會看到本文前面顯示的效果,最后我們再來了解一個調試的工具,在代碼區下方點擊圖標即可打開Visualizations彈窗,通過顯示檢測到表面、遮擋和錨點等來輔助我們的開始,我們的示例圖片便是勾選了??Surfaces??之后的效果。

Xcode visualizations

示例代碼:??GitHub倉庫??

其它相關內容請見??虛擬現實(VR)/增強現實(AR)&visionOS開發學習筆記??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161472.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161472.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161472.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spark---集群搭建

Standalone集群搭建與Spark on Yarn配置 1、Standalone Standalone集群是Spark自帶的資源調度框架,支持分布式搭建,這里建議搭建Standalone節點數為3臺,1臺master節點,2臺worker節點,這虛擬機中每臺節點的內存至少給…

transformer之KV Cache

一、為什么要研究KV Cache 非常有效的加速推理速度,效果如下所示: import numpy as np import time import torch from transformers import AutoModelForCausalLM, AutoTokenizer NAME_OR_PATH r*************** device "cuda" if torch.cu…

中職組網絡安全 Server-Hun-1.img Server-Hun-2.img

一串密碼 smbuser用戶和密碼登錄ssh還是失敗提示需要密鑰,嘗試ftp登錄成功 發現密鑰存放在.ssh/下,在kali上生成一個密鑰,通過上傳到.ssh/下,將其替換掉 使用kali生成密鑰 登錄成功,但是無法拿到root目錄下的flag 獲取root用戶權限…

電子學會C/C++編程等級考試2022年12月(一級)真題解析

C/C++等級考試(1~8級)全部真題?點這里 第1題:加一 輸入一個整數x,輸出這個整數加1后的值,即x+1的值。 時間限制:1000 內存限制:65536輸入 一個整數x(0 ≤ x ≤ 1000)。輸出 按題目要求輸出一個整數。樣例輸入 9樣例輸出 10 答案: //參考答案: #include<bits/st…

opencv-常用代碼

以下是一些OpenCV中常用的代碼片段&#xff0c;涵蓋了一些基本的圖像處理和計算機視覺任務。 加載和顯示圖像: import cv2# 讀取圖像 img cv2.imread(image.jpg)# 顯示圖像 cv2.imshow(Image, img) cv2.waitKey(0) cv2.destroyAllWindows()調整圖像大小: resized_img cv2.res…

鴻蒙4.0開發筆記之DevEco Studio頁面操作router的pushUrl頁面跳轉與back返回上一頁(五)

一、認識組件 關于HarmonyOS中ArkTS的基礎組件請參見文章鴻蒙4.0開發筆記之ArkTs語言基礎與基本組件結構&#xff08;四&#xff09; 二、實現頁面跳轉pushUrl 1、操作說明 實現頁面跳轉的核心便是router.pushUrl的調用&#xff0c;操作起來也很簡單&#xff0c;總共就四步…

Laravel 安裝(筆記一)

目錄 第一步、Laravel 一般使用 composer安裝 第二步、使用composer安裝項目 第三步、配置環境 第四步、訪問域名&#xff0c;安裝完成 Laravel 官網 l???????Installation - Laravel 中文網 為 Web 工匠創造的 PHP 框架 第一步、Laravel 一般使用 composer安裝 如…

13.求面積[有問題]

#include<stdio.h> #include<math.h> #include<bits/stdc.h> using namespace std;void fun(double a,b,c) {double p,c;p (abc)/2;c sqrt(p*(p-a)*(p-b)*(p-c));printf("面積是&#xff1a;%lf",c); }int main(){double a,b,c;scanf("%lf,%…

《golang設計模式》第三部分·行為型模式-06-備忘錄模式(Memento)

文章目錄 1. 概述1.1 角色1.2 類圖 2. 代碼示例2.1 設計2.2 代碼2.3 類圖 1. 概述 備忘錄&#xff08;Memento&#xff09;用于在不破壞目標對象封裝特性的基礎上&#xff0c;將目標對象內部的狀態存儲到外部對象中&#xff0c;以備之后恢復狀態時使用。 1.1 角色 Originato…

【洛谷 B2008】計算 (a+b)×c 的值 題解(順序結構+四則運算)

計算 (ab)c 的值 題目描述 給定 3 3 3 個整數 a , b , c a,b,c a,b,c&#xff0c;計算表達式 ( a b ) c (ab) \times c (ab)c 的值。 輸入格式 輸入僅一行&#xff0c;包括三個整數 a , b , c a,b,c a,b,c&#xff0c;數與數之間以一個空格分開。 輸出格式 輸出一行…

如何訪問linux上的web服務

1.獲取服務運行端口 例如8080 2.如果時vmware 需要先配置轉發端口和主機ip 主機ip需要未使用的 例如&#xff1a; 3.查看虛擬機防火墻設置 centos8 為例 &#xff1a; firewall-cmd --zonepublic --list-ports 查看放通端口 如果沒有放通 firewall-cmd --zonepublic --add-p…

04 if進階

elif 否則如果 如果條件沒有滿足 會繼續進入“否則如果”里面判斷 只要滿足一個條件 條件判斷立即終止 chinese 100 if chinese 100:print("我們去迪士尼玩")elif chinese > 90:print("我們去朱雀森林公園")else:print("回家寫作業")if n…

GO MySQL數據庫操作封裝

Go 語言操作數據庫, 數據庫連接封裝&#xff1a; package Test_dbimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""log""sync" )var (DB *sql.DBpoolOnce sync.Once )func NewConnection() (*sql.…

微信小程序藍牙連接 uniApp藍牙連接設備

藍牙列表期待效果 代碼 <template><view class"bluetooth-list"><view class"align-items option" style"justify-content: space-between;" v-for"item in bluetoothList" :key"item.deviceId"><vie…

游戲開發團隊配置與協作流程

游戲開發技術圖譜 - 知乎 游戲制作的流程是什么啊&#xff1f; - 知乎 系統策劃&#xff1a;一張圖梳理游戲系統的生產流程 - 知乎 游戲開發入門&#xff08;十一&#xff09;游戲引擎架構-CSDN博客

全局定制序列化

作用:將返回實體類中的屬性如果為null 變成"" package com.example.micrweb.config;import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.f…

linux驅動——原子操作

linux驅動——原子操作 原子操作 API Linux 內核定義了叫做 atomic_t 的結構體來完成整型數據的原操作&#xff0c;在使用是使用原子變量來代替整型變量。此結構體定義在 include/linux/types.h 文件中&#xff0c;定義如下&#xff1a; typedef struct {int counter; }atom…

websocket與node.js實現

什么是 websocket&#xff1f; websoket 是一種網絡通信協議&#xff0c;基于 tcp 連接的全雙工通信協議&#xff08;客戶端和服務器可以同時收發信息&#xff09;&#xff0c;值得注意的是他不基于 http 協議&#xff0c;websocket 只有在建立連接的時候使用到 http 協議進行…

Kubernetes(k8s)之Pod詳解

文章目錄 Kubernetes之Pod詳解一、Pod介紹pod結構pod定義 二、Pod配置pod基本配置鏡像拉取策略啟動命令環境變量端口設置資源配額 三、Pod生命周期創建和終止初始化容器鉤子函數容器探測重啟策略 四、Pod調度定向調度NodeNameNodeSelector 親和性調度NodeAffinityPodAffinityPo…

風電場葉片運輸車模型-FBX格式-帶動畫-數字孿生場景搭建

FBX格式的風電場中葉片運輸車輛模型&#xff0c;按照真實尺寸建模&#xff0c;車輛多個部位帶動畫效果&#xff0c;適用于風電場三維數字化場景和風電場數字孿生使用&#xff0c;也可以用來作為各種三維平臺的測試模型。 模型效果圖 下載地址 葉片運輸車模型下載地址