2017-01-22 5 views
2

SKTextureのテクスチャにミップマップを適用する方法がわかりません。私はSwiftでXcode 8.2.1を使用しています。ここでSpriteKit SKTextureのミップマップが機能しない

は私の方法である:私は(ポットの両方) フルサイズ:512×512サイズのPNG形式サンプル画像を使用し

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

それは次のようになります。 full size image

その後、私はそのサイズを小さくしたいです128個の* 128ピクセル

decrease size

そして、ここまでで出力されます有効ミップマッピング:ミップマッピングなし mipmapping enabled output 128*128

そして、例えば出力を彼らの両方が同じに見えますwithout mipmapping

を(のみリニアフィルタリングデフォルト)。だからミップマップは当てはまりませんでした。私を助けてください、私はこの問題を解決しようと3日間過ごしました。

UPD: Confused私に言われたように、私はコードですべての仕事をしました。ミップマップを有効にしてテクスチャを作成し、それをSKSpriteNodeに割り当ててから、スケール方法またはアクションでスケーリングを実行します。

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) 

結果は同じです。 enter image description here

+2

あなたはそうです。彼らはまったく同じです。私はそれらをPhotoshopにドロップし、Differenceブレンドを行いました。ミップマップを使用しないものは、スクリーンショットでは左に1ピクセルありますが、一度修正すれば同じです。 – Confused

答えて

1

ミップマッピングは、あなたのコードによって活性化される前に、XcodeのSpriteKitベースシーンエディタがあなたのテクスチャのサイズ変更を行っている場合には、すべてで、驚かないだろう。これは、XcodeとSpriteKit SceneEditorがテクスチャとして保存するために寄せ集めたものなので、128x128のテクスチャのミップマッピングがオンになっていることを意味します。

ので、代わりのSKSpriteNodeスケーリングするためにこれを使用し、あなたのコード内でミップマッピングをオンにした後、シーンエディタでスケールを設定する:SKActionスケーリング操作で

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

および/または実験:

あなたは一連のイベントが

であることを絶対に確認することができます。このように

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

ミップマッピング

    1. 電源を入れ

    スケーリング実行し、うまくいけば、これは動作します。

  • +0

    あなたの答えをありがとうが、それは助けにはならない。上のUPDを見てください。 – widesteppe

    +0

    DOH!どのデバイスでこれをテストしましたか? – Confused

    +0

    私のMacとiOSシミュレータでテスト済みです。 – widesteppe