iT邦幫忙

2024 iThome 鐵人賽

DAY 30
0
Mobile Development

從 SwiftUI 到 Apple Vision Pro - SwiftUI 從零開始系列 第 30

從 SwiftUI 到 Apple Vision Pro - SwiftUI 從零開始 Day30

  • 分享至 

  • xImage
  •  

Day30 全景影片

有全景照片,就會有全景影片。全景影片的製作方式跟照片類似,只不過讀取照片的方修改成讀取影片。這邊一開始也是需要準備一個360度的影片。

https://ithelp.ithome.com.tw/upload/images/20240828/20162607Scw0rRHkXL.png

讀取影片:

struct ImmersiveView: View {
        
    var body: some View {
        RealityView { content in
            let avPlayer = AVPlayer()
            
            let url = Bundle.main.url(forResource: "video", withExtension: "mp4")!
            let asset = AVAsset(url: url)
            let playerItem = AVPlayerItem(asset: asset)
            
            let material = VideoMaterial(avPlayer: avPlayer)
            
            let videoEntity = Entity()
            videoEntity.components.set(ModelComponent(mesh: .generateSphere(radius: 1E3), materials: [material]))
            videoEntity.scale *= SIMD3(-1, 1, 1)
            videoEntity.orientation *= simd_quatf(angle: .pi / 2, axis: [0, 1, 0])
            
            content.add(videoEntity)
            
            avPlayer.replaceCurrentItem(with: playerItem)
            avPlayer.play()
        }
    }
}

這段程式是讀取影片的方式,而這個影片是透過資源檔案方式儲存在專案內:

let avPlayer = AVPlayer()
            
let url = Bundle.main.url(forResource: "video", withExtension: "mp4")!
let asset = AVAsset(url: url)
let playerItem = AVPlayerItem(asset: asset)

透過AVPlayer物件來播放影片,而AVPlayer只能播放AVPlayerItem物件,將讀取到的影片檔案透過AVAsset給予AVPlayerItem。

rootEntity.components.set:新增了一個半徑為1E3的球體,並且將材質設定為所建立的material。

videoEntity.scale = SIMD3(-1, 1, 1):將rootEntity的縮放沿x軸翻轉,使得球體的內部朝外。

videoEntity.orientation = simdquatf(angle: .pi / 2, axis: [0, 1, 0]):將videoEntity繞著Y軸旋轉90度。

回到程式進入點,在ImmersiveSpace加入屬性immersionStyle:

ImmersiveSpace(id: "ImmersiveSpace") {
    ImmersiveView()
}
.immersionStyle(selection: .constant(.progressive), in: .progressive)

開啟App之後:

https://ithelp.ithome.com.tw/upload/images/20240828/20162607pkSwsShh7y.png

打開開關,就會有一個半圓弧的影片正在播放:

https://ithelp.ithome.com.tw/upload/images/20240828/20162607NC3f2dHu88.png

如果將immersionStyle設定為full:

ImmersiveSpace(id: "ImmersiveSpace") {
    ImmersiveView()
}
.immersionStyle(selection: .constant(.full), in: .full)

就可以觀看一個完全360度的環景影片。

https://ithelp.ithome.com.tw/upload/images/20240828/20162607REZGHvR2P9.png


至此,「從 SwiftUI 到 Apple Vision Pro」的 30 天之旅也告一個段落,但這只是一開始,空間運算的應用與想像也可以很天馬行空,我們即將從2D的手機平面世界進入到完全3D的空間裡,這是一個全新的領域,也更是一個大挑戰。

期待,與您再次相會。

從 SwiftUI 到 Apple Vision Pro - SwiftUI 從零開始 Day30 [完]


上一篇
從 SwiftUI 到 Apple Vision Pro - SwiftUI 從零開始 Day29
系列文
從 SwiftUI 到 Apple Vision Pro - SwiftUI 從零開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言