質問

処理2.0でシェーダを試しています。 わずかなポイントシェーダを理解しても簡単な抜粋として、私はスプライトクラスでシステムを実装しました:

  1. 私はSpritesheetをフラグメントシェーダに均一なSampler2dとして設定します。 2048x 2048(12 x 12フレーム12 x 12フレーム)
  2. ポイントを作成します。
  3. ポイントの頂点シェーダのUV座標を設定します。
  4. 私は、Spritesheet
  5. の「フレーム」を選択するために均一変数として渡された整数によって、頂点シェーダのUV座標をオフセットします。
  6. i整数(ループのモジュラスを使用して)更新アプリケーション内の5フレームごとにUVオフセットをインクリメントします。
  7. これは、頂点シェーダ内から基本的なアニメーションシーケンスを実行できることを意味します。これが望ましいかどうかはわかりませんが、フレームを変更したい毎にフラグメントシェーダに新しいユニフォームSampler2Dを設定するよりも優れていると思われる。

    私の質問は、このシェーダを複数のインスタンスにわたって使用する方法を教えてください。 2つのスプライトが画面上に同時に異なる値で(つまり、アニメーションの異なるフレームを再生する)が、それぞれ独自のPointShaderを持たず、したがってメモリ内のユニフォームSampler2Dのコピーを持たないことにどのように達成されますか。

    あなたが助けることができることを願っています

役に立ちましたか?

解決

はい、このアプローチはフレームごとに新しいテクスチャを設定することをはるかに優れています。

複数のスプライトを描くと同じプログラムを使用して、オブジェクトを異なるユニフォームを使用して1つずつ描画します。

1:GluseProgram(あなたのプログラム);

2:..最初のオブジェクトのテクスチャとUV

3:..draw exterオブジェクト

4:..新しいテクスチャ(または同じテクスチャを保つ)がある(またはスプライトはあります) .. UVのセット2番目のオブジェクト

5:.. 2番目のオブジェクトなどの

編集:プログラムはあなたがそれに設定したユニフォームによってバインドされていません、いつでも変更してから描画してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top