GLSL Gif तड़पना प्रभाव: अधिक उपयोग
मैं एक टुकड़ा शेडर कि अनिवार्य रूप से रंग अल्फा पढ़ता है और पिक्सल भर में एक कटौती के प्रभाव में इसकी अनुवाद मिल गया है।
हालांकि, यह सभी मोड और यदि कथन के साथ काफी प्रोसेसर गहन है। क्या किसी के पास नीचे दिए गए कोड को अनुकूलित करने पर कोई सिफारिश है?
varying vec2 the_uv;
varying vec4 color;
void main()
{
// The pixel color will correspond
// to the uv coords of the texture
// for the given vertice, retrieved
// by the Vertex shader through varying vec2 the_uv
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
vec4 tex = texture2D(_MainTex, the_uv);
tex = tex * color ;
float r = tex.a;
if (r > 0.1) {
if ((mod(gl_FragCoord.x, 4.001) + mod(gl_FragCoord.y, 4.0)) > 6.00) {
gl_FragColor = color;
}
}
if (r > 0.5) {
if ((mod(gl_FragCoord.x + 2.0, 4.001) + mod(gl_FragCoord.y, 4.0)) > 6.00) {
gl_FragColor = color;
}
}
if (r > 0.7) {
if ((mod(gl_FragCoord.x, 4.001) + mod(gl_FragCoord.y + 2.0, 4.0)) > 6.00) {
gl_FragColor = color;
}
}
if (r > 0.9) {
if ((mod(gl_FragCoord.x + 1.0, 4.001) + mod(gl_FragCoord.y + 1.0, 4.0)) > 6.00) {
gl_FragColor = color;
}
}
if (r > 0.3) {
if ((mod(gl_FragCoord.x + 2.0, 4.001) + mod(gl_FragCoord.y + 2.0, 4.0)) > 6.00) {
gl_FragColor = color;
}
}
}
यहाँ समाधान प्रतिक्रिया के आधार पर है:
varying vec2 the_uv;
varying vec4 color;
void main()
{
color = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
the_uv = gl_MultiTexCoord0.st;
}
#endif
#ifdef FRAGMENT
uniform sampler2D _MainTex;
uniform sampler2D _GridTex;
varying vec2 the_uv;
varying vec4 color;
void main()
{
if (texture2D(_MainTex, the_uv).a * color.a > texture2D(_GridTex, vec2(gl_FragCoord.x, gl_FragCoord.y)*.25).a) gl_FragColor = color;
else gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
}
आप अपने चर के लिए बहुत सामान्य नाम है का उपयोग करके/4 से बच सकते हैं। यदि आप अधिक अभिव्यक्तिपूर्ण नामों का उपयोग करते हैं तो यह पता लगाने के लिए कि आपका एल्गोरिदम क्या है, यह एक _lot_ आसान होगा। –