簡體   English   中英

導入並顯示swift中的.usdz文件

[英]Import and display .usdz file in swift

我嘗試將 some.usdz 文件導入應用程序並使用 SceneView 顯示 3D model。 當我顯示一些已經在我的 Xcode 文件夾中的 model 時,它可以工作。 但是當在我的手機上運行應用程序並嘗試從我的手機導入文件時,print(fileName) 仍然可以獲得正確的文件名,但 SceneView 中沒有顯示任何內容......任何人都可以幫忙嗎?

@State var fileName = ""
@State var openFile = false
@State var model = Model(id: 0, modelName: "")

var body: some View {
    VStack{
        VStack {
            Text(fileName)
                .fontWeight(.bold)

            Button {
                openFile.toggle()
            } label: {
                Text("Come On")
            }
        }
        .fileImporter(isPresented: $openFile, allowedContentTypes: [.usdz]) {  result in
            switch result {
            case .success(let url):

                _ = url.startAccessingSecurityScopedResource()
                print(url)
                self.fileName = url.lastPathComponent
                print(fileName)
                model.modelName = fileName

            case.failure(let error):
                print(error)
            }
        }
        SceneView(scene: SCNScene(named: model.modelName) , options: [.autoenablesDefaultLighting,.allowsCameraControl])
            .frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height / 2)

更改SCNScene(named: model.modelName) let scene = try? SCNScene(url: url!) let scene = try? SCNScene(url: url!)

例子

struct Viewer3D: View {

@State var urlLocalModel: URL?
@State var openFile = false

var body: some View {
    VStack{
        VStack {
            Button {
                openFile.toggle()
            } label: {
                Text("Open File Local USDZ")
            }
        }
        .fileImporter(isPresented: $openFile, allowedContentTypes: [.usdz]) {  result in
            switch result {
            case .success(let url):
                _ = url.startAccessingSecurityScopedResource()
                self.urlLocalModel = url
                print(url)
            case.failure(let error):
                print(error)
            }
        }
        if (urlLocalModel != nil) {
            let scene = try? SCNScene(url: urlLocalModel!)
            SceneView(scene: scene, options: [.autoenablesDefaultLighting,.allowsCameraControl])
                .frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.width)
        }
    }
}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM