【问题标题】:Is there a way to use compressed textures with SceneKit background CubeMaps?有没有办法在 SceneKit 背景 CubeMaps 中使用压缩纹理?
【发布时间】:2018-05-30 05:22:02
【问题描述】:

SceneKit 使用特定的 SCNMaterial 作为场景的 3D 背景。

我们必须使用 scnScene.background.diffuse.contents = 之一:

  • 垂直条带(单个图像,高度 = 6x 宽度)
  • 水平条带(6x 高度 = 宽度的单个图像)
  • 球面投影(2xheight = width 的单个图像)
  • 6 个方形图像的数组

我的背景图片目前是 JPG 或 PNG 格式,但解压速度很慢,我想使用压缩纹理(PVRTC 或 ASTC 格式)。

我不能使用垂直、水平条和球形投影的压缩纹理,因为它们不是方形图像,而 PVRTC/ASTC 在 iOS 下需要方形纹理。 我尝试 PVRTC 压缩 6 个方形图像的数组,但 background.diffuse.contents 需要 6 个 UIImages 的数组,虽然日志中没有错误,但我在分配 6 个数组时看不到任何 3D 背景SKTexture 到 background.diffuse.contents。

我的问题如下:

  • 有没有办法将 PVRTC 或 ASTC 纹理用作 3D SceneKit 背景(CubeMap、球形投影...)?

【问题讨论】:

    标签: background compression textures scenekit


    【解决方案1】:

    我找到了解决方案。对于任何有兴趣的人:

    您可以将模型 IO 纹理分配给 scnScene.background.contents 您可以使用函数 textureCubeWithImagesNamed 加载立方体贴图模型 IO 纹理:(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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 2014-10-10
      相关资源
      最近更新 更多