0

誰かが私のアガルの質問に光を当ててくれることを願っています:

64x64 の固定サイズのテクスチャがあります。UV と頂点も固定されます。

次に、2D ステージで移動する必要があります。

私が現在使用している方法は、このテクスチャから三角形を描画するたびに新しい頂点を計算してアップロードすることです。

VertexBuffer3D.uploadFromByteArray の処理にかなりの時間がかかることがわかりました。

agal でこれを行うためのよりスマートな方法があるに違いないと私は信じています。

Vertex Shade の定数レジスタで x、y オフセットを渡し、agal で頂点サイズを計算できますか?

これが可能である場合、どうすればそれを行うことができますか?

4

2 に答える 2

2

ジオメトリを 1 回アップロードしてから、各頂点を頂点シェーダーのモデル ビュー パースペクティブ マトリックスで乗算します。マトリックスは、定数レジスターで頂点シェーダーに渡すことができます (1 つの 4x4 マトリックスが 4 つの定数レジスターを取ることに注意してください)。これの良い例です。

于 2012-11-22T09:41:28.267 に答える
0

MVP マトリックスが不十分で、個々の頂点位置を操作する必要がある場合は、定数レジスタ インデックスを使用できます。ただし、頂点シェーダーで使用できる定数レジスタの数に制限があるため、この方法で処理できる頂点の数が制限されていることに注意してください (MVP マトリックスを含む最大 128 の定数)。

  1. ジオメトリを構築するときは、各頂点に一意の ID を割り当て、それを頂点データにアップロードします。最小の ID は、オフセットを格納するために使用される最初の定数のインデックスと等しくなければなりません。この最小 ID が であり、ID がregisterのコンポーネントにn0格納されていると仮定しましょう。また、AGAL には PixelBender のオペコードに相当するものがないため、頂点ごとに初期位置を設定するとよいでしょう。に格納しておきましょう。xva1loadFloatva0
  2. シーンがレンダリングされるたびに、定数を設定します。n0...(n0 + m - 1)ここmで、 は頂点の数です。Float2データ型を使用して、1 つの頂点の x 変位と y 変位の両方を定数内に格納できます。データ型を使用Float4すると、頂点ごとに 2 つの追加の数値を格納できます (色/テクスチャ オフセットなどの場合があります)。少し複雑なシェーダーを使用して、2 つの連続する頂点の xy オフセットを 1 つの定数に格納することもできます。
  3. AGAL では、頂点シェーダーの定数レジスターにインデックスを付けることができます (少なくとも今のところはそれらだけです)。シェーダーでこの機能を使用して、特定の頂点のデータを取得してみましょう。

    mov vt1 vc[va1.x] // obtain the offset from constants using vertex id
    add vt1 vt1 va0   // add the offset to the initial position of the vertex
    m44 op vt1 vc0    // multiply with MVP (assuming that it is stored in vc0...vc3)
    

このアプローチはいくつかの特定のケースに適していますが、一般的なケースでは使用できません。

于 2013-02-10T05:45:57.843 に答える