テキストの周囲に境界線を配置するシェーダーを作成しようとしています。コンパイルして正常に実行されますが、境界線は粗く、エイリアス化されています。それをより良くするための提案はありますか?
これは私が書いた最初のシェーダーなので、APIについてあまり知識がありません。サンプルコードにコメントをお願いします。答えをコピーして貼り付けるだけではありません。理解したいのですが。
さらに、この画像で最もよく説明されているテキストを小さくすると問題が発生します。これを修正するための提案もありますか?
エッジ検出も優れている可能性があります。これまでのところ、入力に使用するアンチエイリアスされたテクスチャにはエッジがあります。0.0 < alpha < 1.0
これまでのところ私はこれを持っています:
#ifdef GL_ES
precision mediump float;
#endif
varying vec2 v_texCoord;
uniform sampler2D u_texture;
uniform vec4 u_borderColor;
uniform float u_width;
uniform float u_height;
void main()
{
mediump vec4 total = vec4(0.0);
float alpha = texture2D(u_texture, v_texCoord).a;
//If somewhere between complete transparent and completely opaque
if (alpha > 0.0 && alpha < 1.0)
{
total.rgb = u_borderColor.rgb;
total.a *= u_borderColor.a;
gl_FragColor = u_borderColor;
}
else
{
gl_FragColor = texture2D(u_texture, v_texCoord);
}
}