Model3DView

在你的 SwiftUI 应用中轻松渲染 3D 模型

SwiftUI SwiftUI Swift Xcode MIT

使用 Model3DView,你可以像使用图像一样,轻松地在你的 SwiftUI 应用中显示 3D 模型。此外,你还可以操作相机和转换模型,同时保持 SwiftUI 友好的方式。

警告 Model3DView 仍处于开发的早期阶段。API 尚未最终确定,并且 可能 会在未来的版本发布中发生更改。


Model3DView in action


目录


示例

Examples


特性 ✨


安装 🛠

在 Xcode 中,通过File > Add Packages > Search or Enter Package URL 将依赖项添加到你的项目中,并使用以下 URL

https://github.com/frzi/Model3DView.git

添加后,在你的代码中导入该包

import Model3DView

注意 如果 Xcode 在解析依赖项时抛出错误,你可以暂时链接到 main 分支,而不是使用标记版本。


快速入门 🚀

代码提供了丰富的文档,包括 DocC。有关视图、方法等的详细信息,请使用 Xcode 的文档功能。

以下是 Model3DView 功能的快速概述。

使用 Model3DView 非常容易。像使用任何其他视图一样使用 Model3DView

import Model3DView

struct MyView: View {
	var body: some View {
		Model3DView(named: "duck.gltf")
	}
}

这会渲染一个名为 "duck.gltf" 的 3D 模型,该模型位于应用程序的 bundle 中。

Model3DView

变换

Model3DView(named: "house.glb")
	.transform(
		rotate: Euler(y: .degrees(45)),
		scale: 1.2,
		transform: [0, 0, -1]
	)

相对于其原点,旋转、缩放和/或平移 3D 资源。 这些属性是可以动画的!

onLoad 处理器

Model3DView(file: model.path)
	.onLoad { state in
		self.modelLoaded = state == .success
	}

出于性能和用户体验原因,3D 资源是异步加载的。 使用 .onLoad 视图修饰符附加一个监听器,以便在资源完全加载后执行。 这使你有机会在 Model3DView 上放置一个临时占位符。


相机

如果不喜欢默认相机,你可以轻松地设置自己的相机。

Model3DView(named: "robot.gltf")
	.camera(PerspectiveCamera(fov: .degrees(75)))

可用的相机类型为 PerspectiveCameraOrthographicCamera


交互式相机

为了减轻你自己做这项艰苦工作的负担,Model3DView 带有交互式相机控制支持。 到目前为止,唯一包含的相机控件是 OrbitControls(也称为“arcball”)。

@State var camera = PerspectiveCamera()

Model3DView(named: "garden.obj")
	.cameraControls(OrbitControls(
		camera: $camera,
		sensitivity: 0.5,
		friction: 0.1
	))

天空盒和 IBL (基于图像的光照)

Model3DView 不允许你在场景中放置灯光。 相反,你可以通过使用环境贴图和天空盒纹理来设置情绪。

Model3DView(file: product.path)
	.ibl(named: "studio_env.exr", intensity: 2)
	.skybox(named: "studio.jpg")

注意:IBL 仅影响使用 PBR 材质的资源。


常见问题 ✋

我可以使用它来制作 3D 游戏吗?

。 非常重要的是要理解 Model3DView 仅用于在你的 SwiftUI 应用中渲染 3D 模型,并且交互非常有限。 它只不过是一个“ImageView”,可以轻松地用 3D 图形来装饰你的应用。

为什么使用 Model3DView 而不是 SceneView

SceneView(包含在 SwiftUI 中)本质上非常有限。 它只是为 SwiftUI 包装了一个 SKSceneView。 但是由于它是闭源的,因此无法控制此视图。 例如:实际上不可能给视图一个透明的背景。

Model3DView 还提供了一个更符合 SwiftUI 生态系统的工作流程; 使用视图修饰符来操作模型和相机。


已知问题 💢


鸣谢 🙇


许可 📄

MIT 许可证.