Swift RoomPlan:导出USDZ时用实体块替代家具
问题解决方案:RoomPlan扫描后导出USDZ用实体块替代家具模型
核心修改点
要实现导出的USDZ文件中用实体块替代家具模型,需调整导出配置和模型提供商两个关键部分:
- 取消加载真实家具模型提供商,避免系统渲染真实家具
- 指定导出选项,强制家具以边界框(实体块)形式输出
修改后的关键代码
调整saveAndViewCapturedRoom()方法
func saveAndViewCapturedRoom() { let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! let exportedRoomsDirectory = documentsDirectory.appendingPathComponent(Constants.exportedRoomsDirectory) let usdzURL = exportedRoomsDirectory .appendingPathComponent("test.usdz") let metadataURL = exportedRoomsDirectory .appendingPathComponent("test.plist") guard let result = finalResult else { print("finalResult is nil. Cannot export.") return } do { // 配置导出选项:将家具替换为边界框实体块 var exportOptions = CapturedRoom.ExportOptions() exportOptions.furnitureRepresentation = .boundingBox try result.export( to: usdzURL, metadataURL: metadataURL, modelProvider: nil, // 不加载真实家具模型 exportOptions: exportOptions) print("Export successful to \(usdzURL.path)") } catch { print("Error during export: \(error.localizedDescription)") } }
(可选)调整RoomBuilder初始化
如果不需要系统对物体形状进行美化优化,可以移除.beautifyObjects选项:
private let roomBuilder = RoomBuilder(options: [])
兼容旧版本RoomPlan说明
若你的项目使用的是早期RoomPlan版本(导出选项为枚举类型),可直接使用.boundingBox枚举值替代结构体配置:
try result.export( to: usdzURL, metadataURL: metadataURL, modelProvider: nil, exportOptions: .boundingBox)
内容的提问来源于stack exchange,提问作者Abdul91
相关产品推荐
相关产品推荐

