如何在realitykit中显示来自画廊的图像?

Posted

技术标签:

【中文标题】如何在realitykit中显示来自画廊的图像?【英文标题】:How to show image from gallery in RealityKit? 【发布时间】:2022-01-16 03:55:02 【问题描述】:

我想显示图库中的图像。 我正在使用 imagePicker 加载图像。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) 
    guard let image = info[.originalImage] as? UIImage else  return 
  
    if let imgUrl = info[UIImagePickerController.InfoKey.imageURL] as? URL            
        self.photoEntity = createPhotoEntity(fileUrl: imgUrl, fileName: imgName)
    
    dismiss(animated: true)

然后我创建了一个这样的模型实体。

private func createPhotoEntity(fileUrl: URL, fileName: String) -> ModelEntity? 
    // Create a TextureResource by loading the contents of the file URL.
    do 
        let texture = try TextureResource.load(contentsOf: fileUrl)
        let planeMesh = MeshResource.generatePlane(width: 0.5, depth: 0.5)
        var material = UnlitMaterial()
        material.color = .init(tint: .red.withAlphaComponent(0.999), texture: .init(texture))
        let entity = ModelEntity(mesh: planeMesh, materials: [material])
        entity.generateCollisionShapes(recursive: true)
        ARView.installGestures([.scale, .translation], for: entity)
        return entity
     catch(let error) 
        print("error loading. \(error.localizedDescription)")
    
    return nil

但事实是,图像以颜色显示,这是合法的。

但是 有没有办法只显示没有颜色的图像?

【问题讨论】:

【参考方案1】:

试试这个。考虑到,tint 颜色乘以图像 - 所以,如果 tint 的 RGBA = [1,1,1,1],乘法的结果将是图像本身(没有着色)...

import ARKit
import RealityKit

class ViewController: UIViewController 
    
    @IBOutlet var arView: ARView!
    var anchor: AnchorEntity!
    
    override func viewDidLoad() 
        super.viewDidLoad()

        self.anchor = AnchorEntity(world: [0,0,-1])
        
        let ball: MeshResource = .generateSphere(radius: 0.25)
        
        var material = UnlitMaterial()
        
        if #available(ios 15.0, *) 

            material.color = try! .init(tint: .white,
                                     texture: .init(.load(named: "img", 
                                                             in: nil)))
        
        
        let ballEntity = ModelEntity(mesh: ball, materials: [material])
        
        self.anchor.addChild(ballEntity)
        
        self.arView.scene.anchors.append(self.anchor)
    

【讨论】:

老兄!!你摇滚。谢谢。它的工作。 :) 我有很多东西要向你学习。我该怎么做? 嗨,@Andy_Jazz,你能看看这个问题吗?分享您对此的看法? ***.com/questions/70321707/… 在 The Foundry NUKE 工作了 15 年以上之后,才对图像的数学和合成理解。 ))))

以上是关于如何在realitykit中显示来自画廊的图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何在特定的imageView上上传特定的图像点击来自android中的画廊和相机

Bootstrap Image Gallery 灯箱显示来自多个画廊的所有图像。只希望显示特定的画廊图像

无法替换图像视图,用于来自相机或画廊的图像(它不起作用)

如何将 Reality Composer (RealityKit) 场景锚定到检测到的图像

如何在android画廊上显示特定文件夹中的图像

如何在 CollectionView 中显示从照片库或相机中选择的图像?画廊视图