在RealityKit中将UIImage添加为平面纹理

10

我正在尝试使用Swift中的新RealityKit框架,想在ARAnchor上放置一个二维图像。我成功创建了一个网格平面,并尝试将图像作为纹理添加到此平面上。我发现可以给材质提供本地图像。如何使用UIImage代替?

let resource = try? TextureResource.load(named: "restart")
var material = UnlitMaterial()
material.baseColor = MaterialColorParameter.texture(resource!)
material.tintColor = UIColor.white.withAlphaComponent(0.99)

let imagePlane = ModelEntity(mesh: MeshResource.generatePlane(width: 0.25, height: 0.25), materials: [SimpleMaterial(color: color, isMetallic: true)])

我可以问一下你为什么想要使用UIImage,目的是什么?UIImage的内容是本地图像、远程图像还是其他内容? - iicaptain
2个回答

13
目前,在RealityKit 2.0中,您不能将UIImage或CIImage用作着色器的纹理。在RealityKit的两个版本中,纹理必须通过load()方法的String类型参数加载。

RealityKit 2.0

要在RealityKit 2.0中为着色器分配纹理,请使用以下方法:

let mesh: MeshResource = .generatePlane(width: 0.45, depth: 0.45)
        
var material = SimpleMaterial()
material.color = .init(tint: .white.withAlphaComponent(0.999),
                    texture: .init(try! .load(named: "texture.png")))
material.metallic = .float(1.0)
material.roughness = .float(0.0)

let model = ModelEntity(mesh: mesh, materials: [material])

RealityKit 1.0

在RealityKit 1.0中,要给着色器分配纹理,可以使用以下方法:

let scene = try! Experience.loadMyScene()

var material = SimpleMaterial()
material.baseColor = try! .texture(.load(named: "texture.png"))
material.metallic = MaterialScalarParameter(floatLiteral: 1.0)
material.roughness = MaterialScalarParameter(floatLiteral: 0.0)
material.tintColor = UIColor.white

let mesh: MeshResource = .generatePlane(width: 0.45, depth: 0.45)
let component = ModelComponent(mesh: mesh, materials: [material])

scene.myFavoriteScene?.children[0].components.set(component)
arView.scene.anchors.append(scene)

CGImage

尽管如此,您可以从内存中的Core Graphics图像创建纹理资源:

static func generate(from: CGImage, 
                 withName: String?, 
                  options: TextureResource.CreateOptions) -> TextureResource

此外,您还可以使用URL参数:
material.color.texture = .init(try! .load(contentsOf: url))  // RealityKit 2.0

1
еҸӘжҳҜжғіжҸҗйҶ’е…¶д»–дәәпјҢеӣҫеғҸеҝ…йЎ»ж·»еҠ еҲ°Assets.xcassetsдёӯзҡ„Texture SetдёӯгҖӮеә”дҪҝз”ЁеңЁAssets.xcassetsдёӯжҳҫзӨәзҡ„иө„жәҗеҗҚз§°гҖӮ - tyirvine

1

截至2020年6月,目前还没有一种直接将UIImage应用于Material的方法。

您可以先将UIImage写入磁盘,然后通过名称加载它,类似于您使用“restart”纹理的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接