SceneKit UIImage材质为黑色

时间:2019-04-03 16:56:34

标签: ios swift uiimage scenekit arkit

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

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

对于某些图像,这可以正常工作,完全没有问题,图像可以正确显示。但是,对于其他图像,平面的纹理显示为全黑,并且Xcode打印“不支持的IOSurface格式:0x00000000”。似乎只有图像是导致此的屏幕截图,尽管某些屏幕截图图像效果很好。

1 个答案:

答案 0 :(得分: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)!
}

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