首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SwiftUI-3D模型加载与显示

SwiftUI-3D模型加载与显示

作者头像
YungFan
发布2025-05-27 08:54:09
发布2025-05-27 08:54:09
17800
代码可运行
举报
文章被收录于专栏:学海无涯学海无涯
运行总次数:0
代码可运行

介绍

在增强现实(AR)应用中,3D 模型的展示是最基础也是最核心的功能之一。无论是家具摆放、产品预览,还是虚拟角色展示,几乎所有 AR App 都依赖于 3D 模型的加载与渲染。本文将介绍如何使用 SwiftUI 和 SceneKit 框架,在 iOS 应用中加载并展示一个 .usdz 格式的 3D 模型。

为什么使用USDZ?

Apple 推荐在 iOS 和 ARKit 应用中使用 .usdz 格式的 3D 模型。它具备以下优势:

  • 支持物理渲染(PBR)材质。
  • 可直接在 Xcode 和 Quick Look 中预览。
  • 与 RealityKit 和 SceneKit 兼容性好。

通过 Apple 的 Reality Converter 工具可以将 .obj、.fbx、.gltf、.glb 等格式的模型其转换为 .usdz,方便在项目中使用。

使用SceneKit加载3D模型

虽然 ARKit 推荐使用 RealityKit 进行开发,但在非 AR 场景下(如普通模型预览),SceneKit 仍是一个非常强大的工具,支持复杂的模型渲染与交互。

代码语言:javascript
代码运行次数:0
运行
复制
import SceneKit
import SceneKit.ModelIO
import SwiftUI

class Model: ObservableObject {
    @Published var scene: SCNScene?

    init() {
        load3DModel()
    }

    // MARK: 加载3D模型
    func load3DModel() {
        guard let url = Bundle.main.url(forResource: "test", withExtension: "usdz") else { return }
        let asset = MDLAsset(url: url)
        asset.loadTextures()
        let scene = SCNScene(mdlAsset: asset)
        self.scene = scene
    }
}

使用SCNView展示模型

通过 UIViewRepresentable 将 SCNView 集成进 SwiftUI,实现模型的预览和交互(支持旋转、缩放等)。

代码语言:javascript
代码运行次数:0
运行
复制
struct SceneView: UIViewRepresentable {
    var scene: SCNScene

    func makeUIView(context: Context) -> SCNView {
        let sceneView = SCNView()
        sceneView.autoenablesDefaultLighting = true
        sceneView.allowsCameraControl = true
        sceneView.scene = scene
        return sceneView
    }

    func updateUIView(_ uiView: SCNView, context: Context) {
        uiView.scene = scene
    }
}

SwiftUI集成

代码语言:javascript
代码运行次数:0
运行
复制
struct ContentView: View {
    @StateObject var model = Model()

    var body: some View {
        NavigationStack {
            VStack {
                if let scene = model.scene {
                    SceneView(scene: scene)
                        .frame(width: 400, height: 400)
                        .padding()
                }
            }
            .navigationTitle("3D模型展示")
        }
    }
}

效果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 为什么使用USDZ?
  • 使用SceneKit加载3D模型
  • 使用SCNView展示模型
  • SwiftUI集成
  • 效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档