【问题标题】:SceneKit UIImage material is blackSceneKit UIImage 材质为黑色
【发布时间】:2019-08-25 07:05:49
【问题描述】:

我正在通过 UIImagePickerController 从照片库中加载图像,并使用该图像设置 SCNPlane 的材质:

let imageView = UIImageView(image: image)
imageView.contentMode = .scaleAspectFit
plane.firstMaterial?.diffuse.contents = imageView

对于某些图像,这可以正常工作,完全没有问题,图像可以正常显示。然而,对于其他图像,平面的纹理显示为完全黑色,并且 Xcode 打印“不支持的 IOSurface 格式:0x00000000”。似乎只有屏幕截图导致了这种情况,尽管一些屏幕截图可以正常工作。

【问题讨论】:

  • 由于内容可以接受各种类型的输入 (developer.apple.com/documentation/scenekit/scnmaterialproperty/…),您是否尝试将 UIColor 与图像模式一起使用?还是根据图像创建纹理对象?或者提供图片路径?
  • 您使用的是 .jpg 还是 .png? iOS 希望你使用 .png 而不是 .jpg。
  • 我查看了一些图像的扩展名,那些不工作的实际上是 PNG,而 JPEG 工作。
  • @YamingLin 所以,jpeg 似乎可以正常工作,但也有一些 png 可以工作,而另一些则不能。你知道为什么会这样吗?谢谢。

标签: ios swift uiimage scenekit arkit


【解决方案1】:

SceneKit 可以同时显示 PNG 和 JPG,一些 PNG 似乎会引起问题。不知道为什么或者它是否是一个错误。您可以做的可能比将所有内容都转换为 JPG(这样您可以保持透明度)更好的是,将您的材料内容设置为图像的 CGImage:

if let cgImage = image.cgImage {
    geometry.firstMaterial?.diffuse.contents = cgImage
}

您还可以通过类似的方式将图像转换为 JPEG,因为 SceneKit 似乎没有 JPG 问题:

if let jpegData = image.jpegData(compressionQuality: 1.0) {
    image = UIImage(data: jpegData)!
}

但是,这样做会失去透明度。

【讨论】:

    猜你喜欢
    • 2018-06-28
    • 2018-10-12
    • 1970-01-01
    • 2018-01-20
    • 2019-02-19
    • 2017-07-31
    • 2018-02-15
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多