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

Bar*_*bek 5 augmented-reality swift arkit realitykit

我正在 swift 中尝试新的 RealityKit 框架,我想在 ARAnchor 上放置一个 2D 图像。我设法创建了一个网格平面,并尝试将图像作为纹理添加到该平面。我发现我可以为材料提供局部图像。我该如何使用 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)])
Run Code Online (Sandbox Code Playgroud)

ARG*_*Geo 15

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

现实套件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])
Run Code Online (Sandbox Code Playgroud)

现实套件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)
Run Code Online (Sandbox Code Playgroud)

CG图像

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

static func generate(from: CGImage, 
                 withName: String?, 
                  options: TextureResource.CreateOptions) -> TextureResource
Run Code Online (Sandbox Code Playgroud)

此外,您还可以使用 URL 参数:

material.color.texture = .init(try! .load(contentsOf: url))  // RealityKit 2.0
Run Code Online (Sandbox Code Playgroud)

  • 只是想向其他人指出,图像必须添加到“Assets.xcassets”内的“纹理集”中。应使用“Assets.xcassets”中显示的资产名称。 (2认同)