Я пытаюсь написать шейдер, чтобы поместить границу вокруг текста. Он компилируется и работает нормально, но граница зернистая и сглаженная. Любые предложения по его улучшению?GLSL Border Shader
Это первого шейдера я написал так что не имею много знаний о 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);
}
}
Это привело к лучшим результатам, но по-прежнему не пригодно для текста меньшего размера. Любые предложения для лучшего обнаружения края, пожалуйста? –
Я собираюсь отметить этот ответ правильно, потому что он указал на недостаток моего кода. Тем не менее, следует отметить, что он не решает все вопросы, поднятые в вопросе. Я еще не нашел идеального решения. –
Для меньшего масштаба вам нужно пройти еще одну переменную шкалу поплавка; и умножить альфа выше с ним ... total.a = scale * (0.5 - alpha) и т. д. масштаб сжимается по мере уменьшения размера текста, поэтому он даст меньшую область с розовым и т. д. Просто экспериментируйте с ней, пока не получите хорошее решение! :) –