Есть ли способ использовать сжатые текстуры с фоновыми кубами SceneKit CubeMaps? - PullRequest
0 голосов
/ 16 мая 2018

SceneKit использует специальный SCNMaterial для трехмерного фона сцены.

Мы должны использовать scnScene.background.diffuse.contents = one of:

  • Вертикальная полоса (одиночное изображение с высотой = 6x ширина)
  • горизонтальная полоса (одиночное изображение с 6x высота = ширина)
  • сферическая проекция (одно изображение с 2xheight = ширина)
  • Anмассив из 6 квадратных изображений

Мои фоновые изображения в настоящее время находятся в формате JPG или PNG, но они медленно распаковываются, и я хотел бы использовать сжатые текстуры (форматы PVRTC или ASTC).

Я не могу использовать сжатые текстуры с использованием вертикальных, горизонтальных полос и сферических проекций, поскольку они не являются квадратными изображениями, а PVRTC / ASTC требуют квадратные текстуры под iOS.Я пытался с помощью PVRTC сжимать массив из 6 квадратных изображений, но background.diffuse.contents требует массив из 6 UIImages, и хотя в журнале нет ошибок, я не вижу никакого трехмерного фона, когда я назначаю массив из 6SKTexture to background.diffuse.contents.

У меня следующий вопрос:

  • Есть ли способ использовать текстуры PVRTC или ASTC в качестве 3D-фона SceneKit (CubeMap, сферическая проекция...)?

1 Ответ

0 голосов
/ 30 мая 2018

Я нашел решение.Для всех, кто заинтересован:

Вы можете назначить текстуру Model IO для scnScene.background.contents. Вы можете загрузить текстуру Model IO карты куба, используя функцию textureCubeWithImagesNamed: (Массив путей к 6 сжатым текстурам PVRTC)

NSURL* posx = [artworkUrl URLByAppendingPathComponent:@"posx.pvr"]; 
NSURL* negx = [artworkUrl URLByAppendingPathComponent:@"negx.pvr"];
NSURL* posy = [artworkUrl URLByAppendingPathComponent:@"posy.pvr"];
NSURL* negy = [artworkUrl URLByAppendingPathComponent:@"negy.pvr"];
NSURL* posz = [artworkUrl URLByAppendingPathComponent:@"posz.pvr"];
NSURL* negz = [artworkUrl URLByAppendingPathComponent:@"negz.pvr"];

MDLTexture* cubeTexture = [MDLTexture textureCubeWithImagesNamed:@[posx.path,negx.path,posy.path,negy.path,posz.path,negz.path] ]; 
scnScene.background.contents = cubeTexture;
...