多くのスプライトをレンダリングしたいので、シェーダーを使用して各スプライトに色を付ける(レインボーエフェクトの場合)必要があります。 (スプライトのテクスチャは最初はグレースケールで表示されています)SpriteBatchと頂点カラーを使用してスプライトごとに色を設定しますか?
最初に、シェーダの外で計算した色を渡したユニフォームでそれを行いました。それは問題なく動作しましたが、遅すぎました。
私はフレームごとにそのユニフォームを何度も設定していたので、遅すぎることがわかりました。私は、次を発見した:
[...] OpenGLでスプライトが簡単に頂点カラーを定義することによって行うことができる着色します。この場合の頂点はSpriteBatch.draw()で定義されているため、SpriteBatch.setColor()で色合いを設定する必要があります。 [...]
そして、私はそうしてみました:(レンダリングで
):
batch.setShader(shader);
batch.setColor(.5f, .3f, 1, 1);
sprite.draw(batch);
batch.setColor(1, 1, 1, 1);
batch.setShader(null);
頂点シェーダ:
void main() {
v_color = a_color;
v_texCoords = a_texCoord0;
gl_Position = u_projTrans * a_position;
}
フラグメントシェーダ:
void main() {
v_color = a_color*gl_Color*2.0;
gl_FragColor = v_color * texture2D(u_texture, v_texCoords);
}
私はGLSLシェーダに精通していないので、今は何も描画していないのかもしれません。私は何かが不足していると思うし、私は何を理解することができません。
色でスプライトの色合いを変更するにはどうすればよいですか?それは速く動作するように?
カスタムシェーダは必要ありません。デフォルトのSpriteBatchシェーダはすでに色味付けをサポートしています。 – Xoppa