使用 Swift 从 URL 为 material 纹理加载图像
Loading images from a URL for a material texture with Swift
我正在尝试从远程图像创建自定义 material 以使用 RealityKit 添加到 ModelEntity。使用本地图像完全可以正常工作,但尝试任何远程操作时都会出现加载错误。
Fatal error: 'try!' expression unexpectedly raised an error: RealityKit.TextureResource.(unknown context at b9817f08).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 图像。
更新 1:这是将行换行后的完整错误:
[API] URL passed to REAssetManagerTextureNoNetworkSyncMemoryAssetCreateWithURL must be a file URL: https://upload.wikimedia.org/wikipedia/commons/1/1b/Demetrius_III_bust.png
Failed to import entity from "https://upload.wikimedia.org/wikipedia/commons/1/1b/Demetrius_III_bust.png"
我还更新了 Info.plist 的应用程序传输安全设置以允许任意加载
看起来 TextureResource.load()
的 contentsOf
参数需要内部文件 URL 而不是外部文件 URL。我首先通过手动下载我需要的图像解决了这个问题。
我正在尝试从远程图像创建自定义 material 以使用 RealityKit 添加到 ModelEntity。使用本地图像完全可以正常工作,但尝试任何远程操作时都会出现加载错误。
Fatal error: 'try!' expression unexpectedly raised an error: RealityKit.TextureResource.(unknown context at b9817f08).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 图像。
更新 1:这是将行换行后的完整错误:
[API] URL passed to REAssetManagerTextureNoNetworkSyncMemoryAssetCreateWithURL must be a file URL: https://upload.wikimedia.org/wikipedia/commons/1/1b/Demetrius_III_bust.png
Failed to import entity from "https://upload.wikimedia.org/wikipedia/commons/1/1b/Demetrius_III_bust.png"
我还更新了 Info.plist 的应用程序传输安全设置以允许任意加载
看起来 TextureResource.load()
的 contentsOf
参数需要内部文件 URL 而不是外部文件 URL。我首先通过手动下载我需要的图像解决了这个问题。