ios - 使用 Swift 从材质纹理的 URL 加载图像
问题描述
我正在尝试从远程图像创建自定义材质,以使用 RealityKit 添加到 ModelEntity。使用本地图像完全可以正常工作,但尝试任何远程操作都会出现加载错误。
致命错误:“试试!” 表达式意外引发错误:RealityKit.TextureResource.($1b9817f08 的未知上下文).LoadError.importFailureWithURL( https://upload.wikimedia.org/wikipedia/commons/1/1b/Demetrius_III_bust.png )
我尝试了来自不同来源的多个图像,包括 http、https、.png、.jpg。在任何地方都找不到这样的工作示例。如果重要的话,我传递给 withName 的 id 是一个 UUID。
func createMaterial(id: String, imageURL: String) -> Material{
var material = SimpleMaterial()
material.metallic = MaterialScalarParameter(floatLiteral: 0.0)
material.roughness = MaterialScalarParameter(floatLiteral: 1.0)
let texture: TextureResource = try! TextureResource.load(contentsOf: URL(string:imageURL)!, withName: id)
let materialTexture: MaterialColorParameter = MaterialColorParameter.texture(texture)
material.baseColor = materialTexture
return material
}
PS如果有人可以推荐一个好的库来处理这种用例的加载和缓存图像,那将是一个巨大的帮助。我发现的所有东西似乎都针对 UIImages 或 SwiftUI Images。
更新1:这是将行包装在一个catch中后的完整错误:
[API] 传递给 REAssetManagerTextureNoNetworkSyncMemoryAssetCreateWithURL 的 URL 必须是文件 URL:https ://upload.wikimedia.org/wikipedia/commons/1/1b/Demetrius_III_bust.png
无法从“ https://upload.wikimedia.org/wikipedia/commons/1/1b/Demetrius_III_bust.png ”导入实体
我还更新了我的 Info.plist 的应用程序传输安全设置以允许任意加载
解决方案
看起来contentsOf
参数TextureResource.load()
需要内部文件 URL 而不是外部 URL。我通过手动下载我首先需要的图像解决了这个问题。
推荐阅读
- apache-kafka - Kafka集群 - 在运行集群上分离内部和外部通信
- glsl - 如何使用 GLSL 渲染圆形晕影
- c# - 基于多个id的领域查询
- php - Opencart 加载更多产品
- mongodb - 如何在 Robomongo 中删除多个集合
- tensorflow - CNN 对象检测:如何降低高误报率
- mysql - 我应该使用日期时间或时间戳来创建和修改日期吗?
- javascript - 具有较长维度的 VizFrame 柱形图
- node.js - 如何使用 async forEach 依次迭代两个数组
- azure-devops - 可以在 VSTS 测试用例结果附件中上传的最大文件大小