0

私は10x10ピクセルのスプライトを持っています。シェーダー プログラムでリアルタイムに色を変更するにはどうすればよいですか。スプライトの青色がすべて緑色に変わりました。スプライトの緑色がすべて白に変わりました。等...

スプライト 10x10 の例

これは、グレー効果のあるテスト シェーダーの例です。

#ifdef GL_ES
precision mediump float;
#endif

varying vec2 v_texCoord;
uniform sampler2D u_texture;

void main()
{
    vec4 normalColor = texture2D(u_texture, v_texCoord);
    float gray = 0.299*normalColor.r + 0.587*normalColor.g + 0.114*normalColor.b;
    gl_FragColor = vec4(gray, gray, gray, normalColor.a);
}

したがって、このシェーダを使用してスプライト グレーを作成します...

コードで私を助けてください。

4

1 に答える 1

0

カラー コンバーターとして機能する 3D テクスチャを作成できます。基本的に、3D テクスチャ ルックアップのテクスチャ座標として元の色の値を使用します。非常に単純な色変換のために、以前に 9^3 と 16^3 のテクスチャでこれを行ったことがあります。特定のケースの 3D テクスチャ サイズを慎重に評価する必要があります。

これは最も単純な解決策ではないかもしれませんが、少なくとも柔軟性があり、フラグメント シェーダーでハード コードされたチェックを必要としません。

もっと単純なことで済むかもしれませんが、質問の情報が少なすぎます。

于 2013-05-22T11:50:17.963 に答える