- Статус
- Оффлайн
- Регистрация
- 10 Фев 2020
- Сообщения
- 428
- Реакции
- 24
хочу сделать шейдер, типо как в экспе под менюшкой тень выглядит
что с этим кодом не так
если что рендерится просто фигура, не размытая
что с этим кодом не так
если что рендерится просто фигура, не размытая
Код:
#version 120
uniform vec2 location;
uniform vec2 rectSize;
uniform vec4 color1, color2, color3, color4;
uniform float radius;
void main() {
vec2 st = gl_TexCoord[0].st;
vec2 halfSize = rectSize * 0.5;
float totalAlpha = 0;
vec3 totalColor = vec3(0);
float passes = 10;
float maxBlurRadius = radius * 1.5;
for (float pass = 0; pass < passes; pass += 1) {
float blurFactor = 1 + pass * 0.05;
for (float i = -maxBlurRadius; i <= maxBlurRadius; i += 1.0) {
float offset = i / maxBlurRadius;
float weight = exp(-offset * offset * 0.5);
vec2 coords = st + vec2(offset, 0);
float distanceToEdge = length(max(abs(coords) - halfSize, 0)) - radius;
float shadowAlpha = smoothstep(0, 1, abs(distanceToEdge));
float smoothedAlpha = shadowAlpha;
totalAlpha += smoothedAlpha * weight;
totalColor += smoothedAlpha * mix(mix(color1.rgb, color2.rgb, st.y), mix(color3.rgb, color4.rgb, st.y), st.x) * weight;
}
}
gl_FragColor = vec4(totalColor / totalAlpha, totalAlpha);
}
Последнее редактирование: