Texture2Dオブジェクトをタイルシートとして使用しています。それは一次元です-1タイルの高さですが、多くのタイルの長さです。
たとえば64x1タイルの代わりに、16x16にするなど、よりコンパクトな方法ではなく、このようにレイアウトすることに不利な点があるかどうか(編集が難しいことは別として)、私はただ興味があります。変更するのはそれほど難しいことではありませんが、長い画像を持っていても問題がなければ、なぜわざわざするのかわかります。
画像が長いと、シート内のスプライトの「インデックス付け」が簡単になります。たとえば、あなたの場合、インデックスの画像はi
座標(w * i, 0)
にあります。ここw
で、は1つのスプライトの幅です。正方形にそれがあるということは、正しいスプライトを見つけるためにもっと複雑な数学が必要であることを意味します。になります(w * (i % 16), h * (i / 16))
。(ちなみに、これらの座標はピクセル単位です。)
長い画像を使用してください!それはあなたのコードをよりきれいに保つでしょう。
唯一の本当の欠点は、少ないスプライトでテクスチャの最大幅(プロファイルでは2048、Reach
プロファイルでは4096 )に達することです。HiDef
これは実際には問題ではありません。それが発生した場合、より多くの行のサポートを追加するのは非常に簡単だからです。
あなたが質問をしているのを見ると、あなたがそれについて心配する必要はほとんどないのに、少なくとも知っておくと興味深い、あいまいでパフォーマンスに関連することが1つあります。
テクスチャのピクセルデータは、行ごとの順序でCPUメモリに保存されます。GetData
したがって、タイルが水平に格納されている場合、単一のタイル(つまり、:および)のピクセルを読み書きしようとするとSetData
、メモリの多くの小さな分散セクションにアクセスすることになります。タイルを垂直に保存した場合、各タイルはメモリの1つの大きなセクションを占有します。これにより、キャッシュの一貫性が向上し、より少ない操作でコピーできます(つまり、より高速になります)。
これはGPUでは問題ではありません。テクスチャは、近くのすべてのピクセル(左右のピクセルだけでなく)がメモリの近くに保存されるようなレイアウトで保存されます。