Материал SceneKit UIImage черный - PullRequest
1 голос
/ 03 апреля 2019

Я загружаю изображения из библиотеки фотографий через UIImagePickerController, и с этим изображением я устанавливаю материал SCNPlane:

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

С некоторыми изображениями это работает нормально, никаких проблем нет,изображение отображается правильно.Однако на других изображениях текстура плоскости отображается полностью черным, и Xcode печатает «Неподдерживаемый формат IOSurface: 0x00000000».Это, кажется, только изображения, которые были скриншотами, вызывающими это, хотя некоторые изображения скриншотов работают очень хорошо.

1 Ответ

1 голос
/ 03 апреля 2019

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)!
}

Однако при этом вы потеряете прозрачность.

...