目前,在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