2

私はIOS用の小さな2Dレンダリングエンジンに取り組んでいます。さまざまなテクスチャにある多くのスプライトをレンダリングしたいと思います。これで簡単に聞こえます...同じテクスチャに属するすべてのスプライトをレンダリングして次のスプライトに移動するだけです...しかし、異なるテクスチャを持つプリミティブのオーバーラップを処理するにはどうすればよいですか?

問題

写真とまったく同じようにレンダリングしたい(重ねて)。つまり、テクスチャを3回切り替える必要があります。そのような混合スプライトが何百もある場合はどうなりますか?クライアントでのテクスチャの切り替えを回避し、すべてのスプライトを1回のショットでレンダリングするため。フラグメントシェーダーで次のコードを使用しています。

if(txt >= 0.5)
    gl_FragColor = texture2D(texture1, texCoords)* clr;

if (txt >= 1.5)
    gl_FragColor = texture2D(texture2, texCoords)* clr;

if (txt >= 2.5)
    gl_FragColor= texture2D(texture3, texCoords)* clr;

if (txt >= 3.5)
    gl_FragColor = texture2D(texture4, texCoords)* clr;

if (txt >= 4.5)
    gl_FragColor = texture2D(texture5, texCoords) * clr;

動的分岐のため、デバイスで実行しているパフォーマンスの問題があります。より良い解決策はありますか?

4

1 に答える 1

1

実際のパフォーマンスの問題の証拠があると仮定すると(そうしない限り、これを気にする必要はありません)、解決策は非常に簡単です。深度バッファーを使用します。

正投影を使用して、スプライトが前方に移動するときに大きくなったり小さくなったりしないようにします。各スプライトに深度値を指定し、深度テストでスプライトの不要な部分を削除します。

于 2012-07-29T20:37:54.673 に答える