0

私はLWJGLを使用してゲームを作成していますが、これまでに5枚または6枚のスプライトシートを使用することにしました。これは、ブロック用、アイテム、オブジェクトなど用の1つです。これにより、密接に関連し、通常は同じサイズ(ブロックとアイテムの場合)のスプライトを含むスプライトシートが作成されます。しかし、これはより良い方法ですか?それとも、組織を一切使わずに、すべてを1つのスプライトシートに投げるだけでよいのでしょうか。

私がそれを正しい方法でやっているなら、別の問題もあります。たとえば、あなたが地図にいるとき、私はブロックを描く必要があります。しかし、ブロックの上には、別のスプライトシートにある電線やその他のものが存在する可能性があります。ただし、この情報は同じ配列に格納されます。したがって、通常は1回だけ繰り返し、そのたびにブロックを描画してから、その上にワイヤを描画します。つまり、スプライトシートを1回ずつ2回切り替えます。しかし、これらを切り替えるには時間がかかるかもしれないと思ったので、2回実行し、最初にすべてのブロックを描画してから、もう一度繰り返してワイヤーを描画する方が面白いかもしれません。テクスチャを変更するために、bindメソッドを持つSlickUtilTextureクラスを使用しています。これは非常に使いやすいです。

4

1 に答える 1

1

「理想」はありません。単にあなたのニーズにとって重要な要素があります。

スプライトシートを使用する理由を覚えておいてください。2Dレンダリングを処理する場合、テクスチャの切り替えはオブジェクトごとに行うにはコストがかかりすぎるためです。レンダリングするスプライトごとにテクスチャを切り替えない限り、パフォーマンスの面ですでにゲームの先を行っています。

考慮する必要があるその他の考慮事項は次のとおりです。

  • 最小ユーザーハードウェア仕様。具体的には、GL_MAX_TEXTURE_SIZEコードで機能させる最小サイズはどれくらいですか?単一のスプライトシートはテクスチャである必要があるため、スプライトシートが大きくなるほど、ハードウェア要件が大きくなります。

    この値はハードウェアに依存しますが、いくつかの一般的な要件があります。OpenGL 3.3には、少なくとも1024が必要です。GL 3.3ハードウェアのほぼすべての部分が4096を提供します。OpenGL4.3は、浮動小数点テクスチャ座標容量の理論上の限界に近づいている大規模な16384を必要とします(少なくとも8ビットのサブピクセルテクスチャ座標精度が必要であると仮定)。

    GL 2.1の最小要件は64ですが、実際の2.1ハードウェアでは512〜2048が提供されます。したがって、これに基づいてスプライトシートのサイズを選択してください。

  • レンダリングしているもの。1枚のスプライトシートから可能な限りレンダリングできるようにする必要があります。避けたいのは、頻繁なテクスチャの切り替えです。あなたの世界がレイヤーに分割されている場合、各レイヤーのスプライトをそれぞれのシートに合わせることができれば、うまくいっています。20のテクスチャ変更でハードウェアが窒息することはありません。問題なのは数万です。

    主なことは、シートを使用するすべてのものを一度にレンダリングすることです。必ずしも同じレンダリング呼び出しである必要はありません。メッシュとシェーダーユニフォーム/固定機能の状態を切り替えることができます。ただし、そのシートに必要なすべてをレンダリングするまで、これらのレンダリング間でシートを切り替えないでください。

于 2013-02-02T01:25:48.833 に答える