SpriteKit SKTexture mipmap 不起作用

Posted

技术标签:

【中文标题】SpriteKit SKTexture mipmap 不起作用【英文标题】:SpriteKit SKTexture mipmap doesn't work 【发布时间】:2017-01-22 06:54:39 【问题描述】:

我无法弄清楚如何为 SKTexture 纹理应用 mipmap。我将 XCode 8.2.1 与 Swift 一起使用。

这是我的方法:

override func sceneDidLoad() 
    logo = childNode(withName: "logo") as! SKSpriteNode
    let texture: SKTexture! = SKTexture.init(imageNamed: "logo")
    texture.usesMipmaps = true
    logo.texture = texture

我使用示例图片 png 512*512 大小(锅都) 全尺寸它看起来像这样:

然后我想把它的大小减小到 128*128 像素

这是启用 mipmapping 的输出:

例如没有 mipmapping 的输出(仅默认线性过滤)

它们看起来都一样。所以我认为 mipmaps 不适用。请帮助我,我已经花了 3 天时间试图解决这个问题。

更新: 正如Confused 告诉我的那样,我在代码中完成了所有工作。创建启用 mipmaping 的纹理,将其分配给 SKSpriteNode,然后通过 scale 方法或操作执行缩放。

let texture = SKTexture.init(imageNamed: "logo")
texture.usesMipmaps = true
logo = SKSpriteNode.init(texture: texture)
logo.position = CGPoint(x: 0, y: 0)
self.addChild(logo)
//logo.scale(to: CGSize(width: 128, height: 128))
let scaleAction = SKAction.scale(to: CGSize(width: 128, height: 128), duration: 1)
    logo.run(scaleAction)

结果是一样的:

【问题讨论】:

你是对的。它们完全相同。我将它们放入 Photoshop 并进行了差异混合。没有 mipmapping 的那个是屏幕截图中它应该在的左侧一个像素,但是一旦更正,它们是相同的。 【参考方案1】:

如果 Xcode SpriteKit 场景编辑器在您的代码激活 mipmapping 之前调整您的纹理大小,这一点也不奇怪。这意味着您的纹理的 128x128 版本具有 mipmapping,因为这是 Xcode 和 SpriteKit SceneEditor 合谋存储为纹理的内容。

因此,不要在场景编辑器中设置比例,而是在代码中打开 mipMapping 后,使用它来缩放 SKSpriteNode:

https://developer.apple.com/reference/spritekit/skspritenode/1645445-scale

和/或尝试 SKAction 缩放操作:

https://developer.apple.com/reference/spritekit/skaction

这样你就可以绝对确定事件的先后顺序是

    开启 mipmapping 执行缩放

希望这行得通。

【讨论】:

感谢您的回答,但无济于事。看看上面的 UPD。 卫生署!你在什么设备上测试过这个? 在我的 Mac 和 ios 模拟器上测试。 啊。行。您肯定会想在设备上进行测试。 GPU 优化(mipmapping 就是其中之一)很有可能不会在模拟器中进行。 好吧,也许模拟器不是此类测试的最佳案例,但我认为 mipmapping 应该在 macOS 10.12.3 上工作

以上是关于SpriteKit SKTexture mipmap 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit SKTexture mipmap 不起作用

SpriteKit SKTexture.preloadTextures 高内存使用 Swift

如何将带有 alpha 的 PNG 转换为 RGBA4444 以便在 SpriteKit SKTexture 中使用它?

UIImage 中的 SKTexture 看起来不同

如何在 SKSpriteNode 中“居中”SKTexture

SpriteKit - 安全区域布局 Iphone X