我正在通过UIImagePickerController从照片库加载图像,并使用该图像设置SCNPlane的材质:
let imageView = UIImageView(image: image)
imageView.contentMode = .scaleAspectFit
plane.firstMaterial?.diffuse.contents = imageView
对于某些图像,这可以正常工作,完全没有问题,图像可以正确显示。但是,对于其他图像,平面的纹理显示为全黑,并且Xcode打印“不支持的IOSurface格式:0x00000000”。似乎只有图像是导致此的屏幕截图,尽管某些屏幕截图图像效果很好。
答案 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)!
}
但是这样做会失去透明度。